{
  "id": "cbcb15e894abb75e781c472318b680d3",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.24",
  "solcLongVersion": "0.8.24+commit.e11b9ed9",
  "input": {
    "language": "Solidity",
    "sources": {
      "@openzeppelin/contracts/access/Ownable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"
      },
      "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"
      },
      "@openzeppelin/contracts/interfaces/IERC2981.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC2981.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Interface for the NFT Royalty Standard.\n *\n * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal\n * support for royalty payments across all NFT marketplaces and ecosystem participants.\n */\ninterface IERC2981 is IERC165 {\n    /**\n     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of\n     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.\n     *\n     * NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the\n     * royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\n     */\n    function royaltyInfo(\n        uint256 tokenId,\n        uint256 salePrice\n    ) external view returns (address receiver, uint256 royaltyAmount);\n}\n"
      },
      "@openzeppelin/contracts/token/common/ERC2981.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/common/ERC2981.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC2981} from \"../../interfaces/IERC2981.sol\";\nimport {IERC165, ERC165} from \"../../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.\n *\n * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for\n * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.\n *\n * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the\n * fee is specified in basis points by default.\n *\n * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See\n * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to\n * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.\n */\nabstract contract ERC2981 is IERC2981, ERC165 {\n    struct RoyaltyInfo {\n        address receiver;\n        uint96 royaltyFraction;\n    }\n\n    RoyaltyInfo private _defaultRoyaltyInfo;\n    mapping(uint256 tokenId => RoyaltyInfo) private _tokenRoyaltyInfo;\n\n    /**\n     * @dev The default royalty set is invalid (eg. (numerator / denominator) >= 1).\n     */\n    error ERC2981InvalidDefaultRoyalty(uint256 numerator, uint256 denominator);\n\n    /**\n     * @dev The default royalty receiver is invalid.\n     */\n    error ERC2981InvalidDefaultRoyaltyReceiver(address receiver);\n\n    /**\n     * @dev The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1).\n     */\n    error ERC2981InvalidTokenRoyalty(uint256 tokenId, uint256 numerator, uint256 denominator);\n\n    /**\n     * @dev The royalty receiver for `tokenId` is invalid.\n     */\n    error ERC2981InvalidTokenRoyaltyReceiver(uint256 tokenId, address receiver);\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {\n        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @inheritdoc IERC2981\n     */\n    function royaltyInfo(\n        uint256 tokenId,\n        uint256 salePrice\n    ) public view virtual returns (address receiver, uint256 amount) {\n        RoyaltyInfo storage _royaltyInfo = _tokenRoyaltyInfo[tokenId];\n        address royaltyReceiver = _royaltyInfo.receiver;\n        uint96 royaltyFraction = _royaltyInfo.royaltyFraction;\n\n        if (royaltyReceiver == address(0)) {\n            royaltyReceiver = _defaultRoyaltyInfo.receiver;\n            royaltyFraction = _defaultRoyaltyInfo.royaltyFraction;\n        }\n\n        uint256 royaltyAmount = (salePrice * royaltyFraction) / _feeDenominator();\n\n        return (royaltyReceiver, royaltyAmount);\n    }\n\n    /**\n     * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a\n     * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an\n     * override.\n     */\n    function _feeDenominator() internal pure virtual returns (uint96) {\n        return 10000;\n    }\n\n    /**\n     * @dev Sets the royalty information that all ids in this contract will default to.\n     *\n     * Requirements:\n     *\n     * - `receiver` cannot be the zero address.\n     * - `feeNumerator` cannot be greater than the fee denominator.\n     */\n    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {\n        uint256 denominator = _feeDenominator();\n        if (feeNumerator > denominator) {\n            // Royalty fee will exceed the sale price\n            revert ERC2981InvalidDefaultRoyalty(feeNumerator, denominator);\n        }\n        if (receiver == address(0)) {\n            revert ERC2981InvalidDefaultRoyaltyReceiver(address(0));\n        }\n\n        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);\n    }\n\n    /**\n     * @dev Removes default royalty information.\n     */\n    function _deleteDefaultRoyalty() internal virtual {\n        delete _defaultRoyaltyInfo;\n    }\n\n    /**\n     * @dev Sets the royalty information for a specific token id, overriding the global default.\n     *\n     * Requirements:\n     *\n     * - `receiver` cannot be the zero address.\n     * - `feeNumerator` cannot be greater than the fee denominator.\n     */\n    function _setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) internal virtual {\n        uint256 denominator = _feeDenominator();\n        if (feeNumerator > denominator) {\n            // Royalty fee will exceed the sale price\n            revert ERC2981InvalidTokenRoyalty(tokenId, feeNumerator, denominator);\n        }\n        if (receiver == address(0)) {\n            revert ERC2981InvalidTokenRoyaltyReceiver(tokenId, address(0));\n        }\n\n        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);\n    }\n\n    /**\n     * @dev Resets royalty information for the token id back to the global default.\n     */\n    function _resetTokenRoyalty(uint256 tokenId) internal virtual {\n        delete _tokenRoyaltyInfo[tokenId];\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/ERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/ERC721.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721} from \"./IERC721.sol\";\nimport {IERC721Metadata} from \"./extensions/IERC721Metadata.sol\";\nimport {ERC721Utils} from \"./utils/ERC721Utils.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {Strings} from \"../../utils/Strings.sol\";\nimport {IERC165, ERC165} from \"../../utils/introspection/ERC165.sol\";\nimport {IERC721Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\nabstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {\n    using Strings for uint256;\n\n    // Token name\n    string private _name;\n\n    // Token symbol\n    string private _symbol;\n\n    mapping(uint256 tokenId => address) private _owners;\n\n    mapping(address owner => uint256) private _balances;\n\n    mapping(uint256 tokenId => address) private _tokenApprovals;\n\n    mapping(address owner => mapping(address operator => bool)) private _operatorApprovals;\n\n    /**\n     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n        return\n            interfaceId == type(IERC721).interfaceId ||\n            interfaceId == type(IERC721Metadata).interfaceId ||\n            super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev See {IERC721-balanceOf}.\n     */\n    function balanceOf(address owner) public view virtual returns (uint256) {\n        if (owner == address(0)) {\n            revert ERC721InvalidOwner(address(0));\n        }\n        return _balances[owner];\n    }\n\n    /**\n     * @dev See {IERC721-ownerOf}.\n     */\n    function ownerOf(uint256 tokenId) public view virtual returns (address) {\n        return _requireOwned(tokenId);\n    }\n\n    /**\n     * @dev See {IERC721Metadata-name}.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-symbol}.\n     */\n    function symbol() public view virtual returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-tokenURI}.\n     */\n    function tokenURI(uint256 tokenId) public view virtual returns (string memory) {\n        _requireOwned(tokenId);\n\n        string memory baseURI = _baseURI();\n        return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenId.toString()) : \"\";\n    }\n\n    /**\n     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n     * by default, can be overridden in child contracts.\n     */\n    function _baseURI() internal view virtual returns (string memory) {\n        return \"\";\n    }\n\n    /**\n     * @dev See {IERC721-approve}.\n     */\n    function approve(address to, uint256 tokenId) public virtual {\n        _approve(to, tokenId, _msgSender());\n    }\n\n    /**\n     * @dev See {IERC721-getApproved}.\n     */\n    function getApproved(uint256 tokenId) public view virtual returns (address) {\n        _requireOwned(tokenId);\n\n        return _getApproved(tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-setApprovalForAll}.\n     */\n    function setApprovalForAll(address operator, bool approved) public virtual {\n        _setApprovalForAll(_msgSender(), operator, approved);\n    }\n\n    /**\n     * @dev See {IERC721-isApprovedForAll}.\n     */\n    function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {\n        return _operatorApprovals[owner][operator];\n    }\n\n    /**\n     * @dev See {IERC721-transferFrom}.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) public virtual {\n        if (to == address(0)) {\n            revert ERC721InvalidReceiver(address(0));\n        }\n        // Setting an \"auth\" arguments enables the `_isAuthorized` check which verifies that the token exists\n        // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.\n        address previousOwner = _update(to, tokenId, _msgSender());\n        if (previousOwner != from) {\n            revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n        }\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) public {\n        safeTransferFrom(from, to, tokenId, \"\");\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual {\n        transferFrom(from, to, tokenId);\n        ERC721Utils.checkOnERC721Received(_msgSender(), from, to, tokenId, data);\n    }\n\n    /**\n     * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\n     *\n     * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the\n     * core ERC-721 logic MUST be matched with the use of {_increaseBalance} to keep balances\n     * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by\n     * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.\n     */\n    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {\n        return _owners[tokenId];\n    }\n\n    /**\n     * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.\n     */\n    function _getApproved(uint256 tokenId) internal view virtual returns (address) {\n        return _tokenApprovals[tokenId];\n    }\n\n    /**\n     * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in\n     * particular (ignoring whether it is owned by `owner`).\n     *\n     * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n     * assumption.\n     */\n    function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) {\n        return\n            spender != address(0) &&\n            (owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender);\n    }\n\n    /**\n     * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.\n     * Reverts if:\n     * - `spender` does not have approval from `owner` for `tokenId`.\n     * - `spender` does not have approval to manage all of `owner`'s assets.\n     *\n     * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n     * assumption.\n     */\n    function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual {\n        if (!_isAuthorized(owner, spender, tokenId)) {\n            if (owner == address(0)) {\n                revert ERC721NonexistentToken(tokenId);\n            } else {\n                revert ERC721InsufficientApproval(spender, tokenId);\n            }\n        }\n    }\n\n    /**\n     * @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n     *\n     * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that\n     * a uint256 would ever overflow from increments when these increments are bounded to uint128 values.\n     *\n     * WARNING: Increasing an account's balance using this function tends to be paired with an override of the\n     * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership\n     * remain consistent with one another.\n     */\n    function _increaseBalance(address account, uint128 value) internal virtual {\n        unchecked {\n            _balances[account] += value;\n        }\n    }\n\n    /**\n     * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner\n     * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.\n     *\n     * The `auth` argument is optional. If the value passed is non 0, then this function will check that\n     * `auth` is either the owner of the token, or approved to operate on the token (by the owner).\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}.\n     */\n    function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) {\n        address from = _ownerOf(tokenId);\n\n        // Perform (optional) operator check\n        if (auth != address(0)) {\n            _checkAuthorized(from, auth, tokenId);\n        }\n\n        // Execute the update\n        if (from != address(0)) {\n            // Clear approval. No need to re-authorize or emit the Approval event\n            _approve(address(0), tokenId, address(0), false);\n\n            unchecked {\n                _balances[from] -= 1;\n            }\n        }\n\n        if (to != address(0)) {\n            unchecked {\n                _balances[to] += 1;\n            }\n        }\n\n        _owners[tokenId] = to;\n\n        emit Transfer(from, to, tokenId);\n\n        return from;\n    }\n\n    /**\n     * @dev Mints `tokenId` and transfers it to `to`.\n     *\n     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n     *\n     * Requirements:\n     *\n     * - `tokenId` must not exist.\n     * - `to` cannot be the zero address.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _mint(address to, uint256 tokenId) internal {\n        if (to == address(0)) {\n            revert ERC721InvalidReceiver(address(0));\n        }\n        address previousOwner = _update(to, tokenId, address(0));\n        if (previousOwner != address(0)) {\n            revert ERC721InvalidSender(address(0));\n        }\n    }\n\n    /**\n     * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must not exist.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeMint(address to, uint256 tokenId) internal {\n        _safeMint(to, tokenId, \"\");\n    }\n\n    /**\n     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n     */\n    function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {\n        _mint(to, tokenId);\n        ERC721Utils.checkOnERC721Received(_msgSender(), address(0), to, tokenId, data);\n    }\n\n    /**\n     * @dev Destroys `tokenId`.\n     * The approval is cleared when the token is burned.\n     * This is an internal function that does not check if the sender is authorized to operate on the token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _burn(uint256 tokenId) internal {\n        address previousOwner = _update(address(0), tokenId, address(0));\n        if (previousOwner == address(0)) {\n            revert ERC721NonexistentToken(tokenId);\n        }\n    }\n\n    /**\n     * @dev Transfers `tokenId` from `from` to `to`.\n     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _transfer(address from, address to, uint256 tokenId) internal {\n        if (to == address(0)) {\n            revert ERC721InvalidReceiver(address(0));\n        }\n        address previousOwner = _update(to, tokenId, address(0));\n        if (previousOwner == address(0)) {\n            revert ERC721NonexistentToken(tokenId);\n        } else if (previousOwner != from) {\n            revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n        }\n    }\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients\n     * are aware of the ERC-721 standard to prevent tokens from being forever locked.\n     *\n     * `data` is additional data, it has no specified format and it is sent in call to `to`.\n     *\n     * This internal function is like {safeTransferFrom} in the sense that it invokes\n     * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.\n     * implement alternative mechanisms to perform token transfer, such as signature-based.\n     *\n     * Requirements:\n     *\n     * - `tokenId` token must exist and be owned by `from`.\n     * - `to` cannot be the zero address.\n     * - `from` cannot be the zero address.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeTransfer(address from, address to, uint256 tokenId) internal {\n        _safeTransfer(from, to, tokenId, \"\");\n    }\n\n    /**\n     * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is\n     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n     */\n    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {\n        _transfer(from, to, tokenId);\n        ERC721Utils.checkOnERC721Received(_msgSender(), from, to, tokenId, data);\n    }\n\n    /**\n     * @dev Approve `to` to operate on `tokenId`\n     *\n     * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is\n     * either the owner of the token, or approved to operate on all tokens held by this owner.\n     *\n     * Emits an {Approval} event.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address to, uint256 tokenId, address auth) internal {\n        _approve(to, tokenId, auth, true);\n    }\n\n    /**\n     * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not\n     * emitted in the context of transfers.\n     */\n    function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual {\n        // Avoid reading the owner unless necessary\n        if (emitEvent || auth != address(0)) {\n            address owner = _requireOwned(tokenId);\n\n            // We do not use _isAuthorized because single-token approvals should not be able to call approve\n            if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) {\n                revert ERC721InvalidApprover(auth);\n            }\n\n            if (emitEvent) {\n                emit Approval(owner, to, tokenId);\n            }\n        }\n\n        _tokenApprovals[tokenId] = to;\n    }\n\n    /**\n     * @dev Approve `operator` to operate on all of `owner` tokens\n     *\n     * Requirements:\n     * - operator can't be the address zero.\n     *\n     * Emits an {ApprovalForAll} event.\n     */\n    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\n        if (operator == address(0)) {\n            revert ERC721InvalidOperator(operator);\n        }\n        _operatorApprovals[owner][operator] = approved;\n        emit ApprovalForAll(owner, operator, approved);\n    }\n\n    /**\n     * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).\n     * Returns the owner.\n     *\n     * Overrides to ownership logic should be done to {_ownerOf}.\n     */\n    function _requireOwned(uint256 tokenId) internal view returns (address) {\n        address owner = _ownerOf(tokenId);\n        if (owner == address(0)) {\n            revert ERC721NonexistentToken(tokenId);\n        }\n        return owner;\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Burnable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC721} from \"../ERC721.sol\";\nimport {Context} from \"../../../utils/Context.sol\";\n\n/**\n * @title ERC-721 Burnable Token\n * @dev ERC-721 Token that can be burned (destroyed).\n */\nabstract contract ERC721Burnable is Context, ERC721 {\n    /**\n     * @dev Burns `tokenId`. See {ERC721-_burn}.\n     *\n     * Requirements:\n     *\n     * - The caller must own `tokenId` or be an approved operator.\n     */\n    function burn(uint256 tokenId) public virtual {\n        // Setting an \"auth\" arguments enables the `_isAuthorized` check which verifies that the token exists\n        // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.\n        _update(address(0), tokenId, _msgSender());\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Enumerable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC721} from \"../ERC721.sol\";\nimport {IERC721Enumerable} from \"./IERC721Enumerable.sol\";\nimport {IERC165} from \"../../../utils/introspection/ERC165.sol\";\n\n/**\n * @dev This implements an optional extension of {ERC721} defined in the ERC that adds enumerability\n * of all the token ids in the contract as well as all token ids owned by each account.\n *\n * CAUTION: {ERC721} extensions that implement custom `balanceOf` logic, such as {ERC721Consecutive},\n * interfere with enumerability and should not be used together with {ERC721Enumerable}.\n */\nabstract contract ERC721Enumerable is ERC721, IERC721Enumerable {\n    mapping(address owner => mapping(uint256 index => uint256)) private _ownedTokens;\n    mapping(uint256 tokenId => uint256) private _ownedTokensIndex;\n\n    uint256[] private _allTokens;\n    mapping(uint256 tokenId => uint256) private _allTokensIndex;\n\n    /**\n     * @dev An `owner`'s token query was out of bounds for `index`.\n     *\n     * NOTE: The owner being `address(0)` indicates a global out of bounds index.\n     */\n    error ERC721OutOfBoundsIndex(address owner, uint256 index);\n\n    /**\n     * @dev Batch mint is not allowed.\n     */\n    error ERC721EnumerableForbiddenBatchMint();\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {\n        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n     */\n    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual returns (uint256) {\n        if (index >= balanceOf(owner)) {\n            revert ERC721OutOfBoundsIndex(owner, index);\n        }\n        return _ownedTokens[owner][index];\n    }\n\n    /**\n     * @dev See {IERC721Enumerable-totalSupply}.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        return _allTokens.length;\n    }\n\n    /**\n     * @dev See {IERC721Enumerable-tokenByIndex}.\n     */\n    function tokenByIndex(uint256 index) public view virtual returns (uint256) {\n        if (index >= totalSupply()) {\n            revert ERC721OutOfBoundsIndex(address(0), index);\n        }\n        return _allTokens[index];\n    }\n\n    /**\n     * @dev See {ERC721-_update}.\n     */\n    function _update(address to, uint256 tokenId, address auth) internal virtual override returns (address) {\n        address previousOwner = super._update(to, tokenId, auth);\n\n        if (previousOwner == address(0)) {\n            _addTokenToAllTokensEnumeration(tokenId);\n        } else if (previousOwner != to) {\n            _removeTokenFromOwnerEnumeration(previousOwner, tokenId);\n        }\n        if (to == address(0)) {\n            _removeTokenFromAllTokensEnumeration(tokenId);\n        } else if (previousOwner != to) {\n            _addTokenToOwnerEnumeration(to, tokenId);\n        }\n\n        return previousOwner;\n    }\n\n    /**\n     * @dev Private function to add a token to this extension's ownership-tracking data structures.\n     * @param to address representing the new owner of the given token ID\n     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address\n     */\n    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {\n        uint256 length = balanceOf(to) - 1;\n        _ownedTokens[to][length] = tokenId;\n        _ownedTokensIndex[tokenId] = length;\n    }\n\n    /**\n     * @dev Private function to add a token to this extension's token tracking data structures.\n     * @param tokenId uint256 ID of the token to be added to the tokens list\n     */\n    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {\n        _allTokensIndex[tokenId] = _allTokens.length;\n        _allTokens.push(tokenId);\n    }\n\n    /**\n     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that\n     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for\n     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).\n     * This has O(1) time complexity, but alters the order of the _ownedTokens array.\n     * @param from address representing the previous owner of the given token ID\n     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address\n     */\n    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {\n        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and\n        // then delete the last slot (swap and pop).\n\n        uint256 lastTokenIndex = balanceOf(from);\n        uint256 tokenIndex = _ownedTokensIndex[tokenId];\n\n        mapping(uint256 index => uint256) storage _ownedTokensByOwner = _ownedTokens[from];\n\n        // When the token to delete is the last token, the swap operation is unnecessary\n        if (tokenIndex != lastTokenIndex) {\n            uint256 lastTokenId = _ownedTokensByOwner[lastTokenIndex];\n\n            _ownedTokensByOwner[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token\n            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index\n        }\n\n        // This also deletes the contents at the last position of the array\n        delete _ownedTokensIndex[tokenId];\n        delete _ownedTokensByOwner[lastTokenIndex];\n    }\n\n    /**\n     * @dev Private function to remove a token from this extension's token tracking data structures.\n     * This has O(1) time complexity, but alters the order of the _allTokens array.\n     * @param tokenId uint256 ID of the token to be removed from the tokens list\n     */\n    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {\n        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and\n        // then delete the last slot (swap and pop).\n\n        uint256 lastTokenIndex = _allTokens.length - 1;\n        uint256 tokenIndex = _allTokensIndex[tokenId];\n\n        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so\n        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding\n        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)\n        uint256 lastTokenId = _allTokens[lastTokenIndex];\n\n        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token\n        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index\n\n        // This also deletes the contents at the last position of the array\n        delete _allTokensIndex[tokenId];\n        _allTokens.pop();\n    }\n\n    /**\n     * See {ERC721-_increaseBalance}. We need that to account tokens that were minted in batch\n     */\n    function _increaseBalance(address account, uint128 amount) internal virtual override {\n        if (amount > 0) {\n            revert ERC721EnumerableForbiddenBatchMint();\n        }\n        super._increaseBalance(account, amount);\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Pausable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC721} from \"../ERC721.sol\";\nimport {Pausable} from \"../../../utils/Pausable.sol\";\n\n/**\n * @dev ERC-721 token with pausable token transfers, minting and burning.\n *\n * Useful for scenarios such as preventing trades until the end of an evaluation\n * period, or having an emergency switch for freezing all token transfers in the\n * event of a large bug.\n *\n * IMPORTANT: This contract does not include public pause and unpause functions. In\n * addition to inheriting this contract, you must define both functions, invoking the\n * {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate\n * access control, e.g. using {AccessControl} or {Ownable}. Not doing so will\n * make the contract pause mechanism of the contract unreachable, and thus unusable.\n */\nabstract contract ERC721Pausable is ERC721, Pausable {\n    /**\n     * @dev See {ERC721-_update}.\n     *\n     * Requirements:\n     *\n     * - the contract must not be paused.\n     */\n    function _update(\n        address to,\n        uint256 tokenId,\n        address auth\n    ) internal virtual override whenNotPaused returns (address) {\n        return super._update(to, tokenId, auth);\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Royalty.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC721} from \"../ERC721.sol\";\nimport {ERC2981} from \"../../common/ERC2981.sol\";\n\n/**\n * @dev Extension of ERC-721 with the ERC-2981 NFT Royalty Standard, a standardized way to retrieve royalty payment\n * information.\n *\n * Royalty information can be specified globally for all token ids via {ERC2981-_setDefaultRoyalty}, and/or individually\n * for specific token ids via {ERC2981-_setTokenRoyalty}. The latter takes precedence over the first.\n *\n * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See\n * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to\n * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.\n */\nabstract contract ERC721Royalty is ERC2981, ERC721 {\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC2981) returns (bool) {\n        return super.supportsInterface(interfaceId);\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721} from \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Enumerable is IERC721 {\n    /**\n     * @dev Returns the total amount of tokens stored by the contract.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n     */\n    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);\n\n    /**\n     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n     * Use along with {totalSupply} to enumerate all tokens.\n     */\n    function tokenByIndex(uint256 index) external view returns (uint256);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721} from \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n    /**\n     * @dev Returns the token collection name.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the token collection symbol.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n     */\n    function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC-721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n    /**\n     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n     */\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n     */\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n    /**\n     * @dev Returns the number of tokens in ``owner``'s account.\n     */\n    function balanceOf(address owner) external view returns (uint256 balance);\n\n    /**\n     * @dev Returns the owner of the `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function ownerOf(uint256 tokenId) external view returns (address owner);\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n     *   a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n     *   {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n     *   a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Transfers `tokenId` token from `from` to `to`.\n     *\n     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\n     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n     * understand this adds an external call which potentially creates a reentrancy vulnerability.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n     * The approval is cleared when the token is transferred.\n     *\n     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n     *\n     * Requirements:\n     *\n     * - The caller must own the token or be an approved operator.\n     * - `tokenId` must exist.\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address to, uint256 tokenId) external;\n\n    /**\n     * @dev Approve or remove `operator` as an operator for the caller.\n     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n     *\n     * Requirements:\n     *\n     * - The `operator` cannot be the address zero.\n     *\n     * Emits an {ApprovalForAll} event.\n     */\n    function setApprovalForAll(address operator, bool approved) external;\n\n    /**\n     * @dev Returns the account approved for `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function getApproved(uint256 tokenId) external view returns (address operator);\n\n    /**\n     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n     *\n     * See {setApprovalForAll}\n     */\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721Receiver.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @title ERC-721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC-721 asset contracts.\n */\ninterface IERC721Receiver {\n    /**\n     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n     * by `operator` from `from`, this function is called.\n     *\n     * It must return its Solidity selector to confirm the token transfer.\n     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be\n     * reverted.\n     *\n     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\n     */\n    function onERC721Received(\n        address operator,\n        address from,\n        uint256 tokenId,\n        bytes calldata data\n    ) external returns (bytes4);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC721/utils/ERC721Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721Receiver} from \"../IERC721Receiver.sol\";\nimport {IERC721Errors} from \"../../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Library that provide common ERC-721 utility functions.\n *\n * See https://eips.ethereum.org/EIPS/eip-721[ERC-721].\n *\n * _Available since v5.1._\n */\nlibrary ERC721Utils {\n    /**\n     * @dev Performs an acceptance check for the provided `operator` by calling {IERC721Receiver-onERC721Received}\n     * on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n     *\n     * The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n     * Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept\n     * the transfer.\n     */\n    function checkOnERC721Received(\n        address operator,\n        address from,\n        address to,\n        uint256 tokenId,\n        bytes memory data\n    ) internal {\n        if (to.code.length > 0) {\n            try IERC721Receiver(to).onERC721Received(operator, from, tokenId, data) returns (bytes4 retval) {\n                if (retval != IERC721Receiver.onERC721Received.selector) {\n                    // Token rejected\n                    revert IERC721Errors.ERC721InvalidReceiver(to);\n                }\n            } catch (bytes memory reason) {\n                if (reason.length == 0) {\n                    // non-IERC721Receiver implementer\n                    revert IERC721Errors.ERC721InvalidReceiver(to);\n                } else {\n                    assembly (\"memory-safe\") {\n                        revert(add(32, reason), mload(reason))\n                    }\n                }\n            }\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/cryptography/Hashes.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/cryptography/Hashes.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library of standard hash functions.\n *\n * _Available since v5.1._\n */\nlibrary Hashes {\n    /**\n     * @dev Commutative Keccak256 hash of a sorted pair of bytes32. Frequently used when working with merkle proofs.\n     *\n     * NOTE: Equivalent to the `standardNodeHash` in our https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n     */\n    function commutativeKeccak256(bytes32 a, bytes32 b) internal pure returns (bytes32) {\n        return a < b ? efficientKeccak256(a, b) : efficientKeccak256(b, a);\n    }\n\n    /**\n     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.\n     */\n    function efficientKeccak256(bytes32 a, bytes32 b) internal pure returns (bytes32 value) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, a)\n            mstore(0x20, b)\n            value := keccak256(0x00, 0x40)\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/MerkleProof.sol)\n// This file was procedurally generated from scripts/generate/templates/MerkleProof.js.\n\npragma solidity ^0.8.20;\n\nimport {Hashes} from \"./Hashes.sol\";\n\n/**\n * @dev These functions deal with verification of Merkle Tree proofs.\n *\n * The tree and the proofs can be generated using our\n * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n * You will find a quickstart guide in the readme.\n *\n * WARNING: You should avoid using leaf values that are 64 bytes long prior to\n * hashing, or use a hash function other than keccak256 for hashing leaves.\n * This is because the concatenation of a sorted pair of internal nodes in\n * the Merkle tree could be reinterpreted as a leaf value.\n * OpenZeppelin's JavaScript library generates Merkle trees that are safe\n * against this attack out of the box.\n *\n * IMPORTANT: Consider memory side-effects when using custom hashing functions\n * that access memory in an unsafe way.\n *\n * NOTE: This library supports proof verification for merkle trees built using\n * custom _commutative_ hashing functions (i.e. `H(a, b) == H(b, a)`). Proving\n * leaf inclusion in trees built using non-commutative hashing functions requires\n * additional logic that is not supported by this library.\n */\nlibrary MerkleProof {\n    /**\n     *@dev The multiproof provided is not valid.\n     */\n    error MerkleProofInvalidMultiproof();\n\n    /**\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n     * defined by `root`. For this, a `proof` must be provided, containing\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in memory with the default hashing function.\n     */\n    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {\n        return processProof(proof, leaf) == root;\n    }\n\n    /**\n     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n     * hash matches the root of the tree. When processing the proof, the pairs\n     * of leaves & pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in memory with the default hashing function.\n     */\n    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {\n        bytes32 computedHash = leaf;\n        for (uint256 i = 0; i < proof.length; i++) {\n            computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);\n        }\n        return computedHash;\n    }\n\n    /**\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n     * defined by `root`. For this, a `proof` must be provided, containing\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in memory with a custom hashing function.\n     */\n    function verify(\n        bytes32[] memory proof,\n        bytes32 root,\n        bytes32 leaf,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bool) {\n        return processProof(proof, leaf, hasher) == root;\n    }\n\n    /**\n     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n     * hash matches the root of the tree. When processing the proof, the pairs\n     * of leaves & pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in memory with a custom hashing function.\n     */\n    function processProof(\n        bytes32[] memory proof,\n        bytes32 leaf,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bytes32) {\n        bytes32 computedHash = leaf;\n        for (uint256 i = 0; i < proof.length; i++) {\n            computedHash = hasher(computedHash, proof[i]);\n        }\n        return computedHash;\n    }\n\n    /**\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n     * defined by `root`. For this, a `proof` must be provided, containing\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in calldata with the default hashing function.\n     */\n    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {\n        return processProofCalldata(proof, leaf) == root;\n    }\n\n    /**\n     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n     * hash matches the root of the tree. When processing the proof, the pairs\n     * of leaves & pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in calldata with the default hashing function.\n     */\n    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {\n        bytes32 computedHash = leaf;\n        for (uint256 i = 0; i < proof.length; i++) {\n            computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);\n        }\n        return computedHash;\n    }\n\n    /**\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n     * defined by `root`. For this, a `proof` must be provided, containing\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in calldata with a custom hashing function.\n     */\n    function verifyCalldata(\n        bytes32[] calldata proof,\n        bytes32 root,\n        bytes32 leaf,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bool) {\n        return processProofCalldata(proof, leaf, hasher) == root;\n    }\n\n    /**\n     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n     * hash matches the root of the tree. When processing the proof, the pairs\n     * of leaves & pre-images are assumed to be sorted.\n     *\n     * This version handles proofs in calldata with a custom hashing function.\n     */\n    function processProofCalldata(\n        bytes32[] calldata proof,\n        bytes32 leaf,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bytes32) {\n        bytes32 computedHash = leaf;\n        for (uint256 i = 0; i < proof.length; i++) {\n            computedHash = hasher(computedHash, proof[i]);\n        }\n        return computedHash;\n    }\n\n    /**\n     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n     *\n     * This version handles multiproofs in memory with the default hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n     *\n     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n     * The `leaves` must be validated independently. See {processMultiProof}.\n     */\n    function multiProofVerify(\n        bytes32[] memory proof,\n        bool[] memory proofFlags,\n        bytes32 root,\n        bytes32[] memory leaves\n    ) internal pure returns (bool) {\n        return processMultiProof(proof, proofFlags, leaves) == root;\n    }\n\n    /**\n     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n     * respectively.\n     *\n     * This version handles multiproofs in memory with the default hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n     *\n     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n     * validating the leaves elsewhere.\n     */\n    function processMultiProof(\n        bytes32[] memory proof,\n        bool[] memory proofFlags,\n        bytes32[] memory leaves\n    ) internal pure returns (bytes32 merkleRoot) {\n        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by\n        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n        // the Merkle tree.\n        uint256 leavesLen = leaves.length;\n        uint256 proofFlagsLen = proofFlags.length;\n\n        // Check proof validity.\n        if (leavesLen + proof.length != proofFlagsLen + 1) {\n            revert MerkleProofInvalidMultiproof();\n        }\n\n        // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n        bytes32[] memory hashes = new bytes32[](proofFlagsLen);\n        uint256 leafPos = 0;\n        uint256 hashPos = 0;\n        uint256 proofPos = 0;\n        // At each step, we compute the next hash using two values:\n        // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n        //   get the next hash.\n        // - depending on the flag, either another value from the \"main queue\" (merging branches) or an element from the\n        //   `proof` array.\n        for (uint256 i = 0; i < proofFlagsLen; i++) {\n            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n            bytes32 b = proofFlags[i]\n                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])\n                : proof[proofPos++];\n            hashes[i] = Hashes.commutativeKeccak256(a, b);\n        }\n\n        if (proofFlagsLen > 0) {\n            if (proofPos != proof.length) {\n                revert MerkleProofInvalidMultiproof();\n            }\n            unchecked {\n                return hashes[proofFlagsLen - 1];\n            }\n        } else if (leavesLen > 0) {\n            return leaves[0];\n        } else {\n            return proof[0];\n        }\n    }\n\n    /**\n     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n     *\n     * This version handles multiproofs in memory with a custom hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n     *\n     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n     * The `leaves` must be validated independently. See {processMultiProof}.\n     */\n    function multiProofVerify(\n        bytes32[] memory proof,\n        bool[] memory proofFlags,\n        bytes32 root,\n        bytes32[] memory leaves,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bool) {\n        return processMultiProof(proof, proofFlags, leaves, hasher) == root;\n    }\n\n    /**\n     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n     * respectively.\n     *\n     * This version handles multiproofs in memory with a custom hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n     *\n     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n     * validating the leaves elsewhere.\n     */\n    function processMultiProof(\n        bytes32[] memory proof,\n        bool[] memory proofFlags,\n        bytes32[] memory leaves,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bytes32 merkleRoot) {\n        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by\n        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n        // the Merkle tree.\n        uint256 leavesLen = leaves.length;\n        uint256 proofFlagsLen = proofFlags.length;\n\n        // Check proof validity.\n        if (leavesLen + proof.length != proofFlagsLen + 1) {\n            revert MerkleProofInvalidMultiproof();\n        }\n\n        // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n        bytes32[] memory hashes = new bytes32[](proofFlagsLen);\n        uint256 leafPos = 0;\n        uint256 hashPos = 0;\n        uint256 proofPos = 0;\n        // At each step, we compute the next hash using two values:\n        // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n        //   get the next hash.\n        // - depending on the flag, either another value from the \"main queue\" (merging branches) or an element from the\n        //   `proof` array.\n        for (uint256 i = 0; i < proofFlagsLen; i++) {\n            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n            bytes32 b = proofFlags[i]\n                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])\n                : proof[proofPos++];\n            hashes[i] = hasher(a, b);\n        }\n\n        if (proofFlagsLen > 0) {\n            if (proofPos != proof.length) {\n                revert MerkleProofInvalidMultiproof();\n            }\n            unchecked {\n                return hashes[proofFlagsLen - 1];\n            }\n        } else if (leavesLen > 0) {\n            return leaves[0];\n        } else {\n            return proof[0];\n        }\n    }\n\n    /**\n     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n     *\n     * This version handles multiproofs in calldata with the default hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n     *\n     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n     * The `leaves` must be validated independently. See {processMultiProofCalldata}.\n     */\n    function multiProofVerifyCalldata(\n        bytes32[] calldata proof,\n        bool[] calldata proofFlags,\n        bytes32 root,\n        bytes32[] memory leaves\n    ) internal pure returns (bool) {\n        return processMultiProofCalldata(proof, proofFlags, leaves) == root;\n    }\n\n    /**\n     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n     * respectively.\n     *\n     * This version handles multiproofs in calldata with the default hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n     *\n     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n     * validating the leaves elsewhere.\n     */\n    function processMultiProofCalldata(\n        bytes32[] calldata proof,\n        bool[] calldata proofFlags,\n        bytes32[] memory leaves\n    ) internal pure returns (bytes32 merkleRoot) {\n        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by\n        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n        // the Merkle tree.\n        uint256 leavesLen = leaves.length;\n        uint256 proofFlagsLen = proofFlags.length;\n\n        // Check proof validity.\n        if (leavesLen + proof.length != proofFlagsLen + 1) {\n            revert MerkleProofInvalidMultiproof();\n        }\n\n        // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n        bytes32[] memory hashes = new bytes32[](proofFlagsLen);\n        uint256 leafPos = 0;\n        uint256 hashPos = 0;\n        uint256 proofPos = 0;\n        // At each step, we compute the next hash using two values:\n        // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n        //   get the next hash.\n        // - depending on the flag, either another value from the \"main queue\" (merging branches) or an element from the\n        //   `proof` array.\n        for (uint256 i = 0; i < proofFlagsLen; i++) {\n            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n            bytes32 b = proofFlags[i]\n                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])\n                : proof[proofPos++];\n            hashes[i] = Hashes.commutativeKeccak256(a, b);\n        }\n\n        if (proofFlagsLen > 0) {\n            if (proofPos != proof.length) {\n                revert MerkleProofInvalidMultiproof();\n            }\n            unchecked {\n                return hashes[proofFlagsLen - 1];\n            }\n        } else if (leavesLen > 0) {\n            return leaves[0];\n        } else {\n            return proof[0];\n        }\n    }\n\n    /**\n     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n     *\n     * This version handles multiproofs in calldata with a custom hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n     *\n     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n     * The `leaves` must be validated independently. See {processMultiProofCalldata}.\n     */\n    function multiProofVerifyCalldata(\n        bytes32[] calldata proof,\n        bool[] calldata proofFlags,\n        bytes32 root,\n        bytes32[] memory leaves,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bool) {\n        return processMultiProofCalldata(proof, proofFlags, leaves, hasher) == root;\n    }\n\n    /**\n     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n     * respectively.\n     *\n     * This version handles multiproofs in calldata with a custom hashing function.\n     *\n     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n     *\n     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n     * validating the leaves elsewhere.\n     */\n    function processMultiProofCalldata(\n        bytes32[] calldata proof,\n        bool[] calldata proofFlags,\n        bytes32[] memory leaves,\n        function(bytes32, bytes32) view returns (bytes32) hasher\n    ) internal view returns (bytes32 merkleRoot) {\n        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by\n        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the\n        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of\n        // the Merkle tree.\n        uint256 leavesLen = leaves.length;\n        uint256 proofFlagsLen = proofFlags.length;\n\n        // Check proof validity.\n        if (leavesLen + proof.length != proofFlagsLen + 1) {\n            revert MerkleProofInvalidMultiproof();\n        }\n\n        // The xxxPos values are \"pointers\" to the next value to consume in each array. All accesses are done using\n        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's \"pop\".\n        bytes32[] memory hashes = new bytes32[](proofFlagsLen);\n        uint256 leafPos = 0;\n        uint256 hashPos = 0;\n        uint256 proofPos = 0;\n        // At each step, we compute the next hash using two values:\n        // - a value from the \"main queue\". If not all leaves have been consumed, we get the next leaf, otherwise we\n        //   get the next hash.\n        // - depending on the flag, either another value from the \"main queue\" (merging branches) or an element from the\n        //   `proof` array.\n        for (uint256 i = 0; i < proofFlagsLen; i++) {\n            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];\n            bytes32 b = proofFlags[i]\n                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])\n                : proof[proofPos++];\n            hashes[i] = hasher(a, b);\n        }\n\n        if (proofFlagsLen > 0) {\n            if (proofPos != proof.length) {\n                revert MerkleProofInvalidMultiproof();\n            }\n            unchecked {\n                return hashes[proofFlagsLen - 1];\n            }\n        } else if (leavesLen > 0) {\n            return leaves[0];\n        } else {\n            return proof[0];\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n        return interfaceId == type(IERC165).interfaceId;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\nimport {Panic} from \"../Panic.sol\";\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n    enum Rounding {\n        Floor, // Toward negative infinity\n        Ceil, // Toward positive infinity\n        Trunc, // Toward zero\n        Expand // Away from zero\n    }\n\n    /**\n     * @dev Return the 512-bit addition of two uint256.\n     *\n     * The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low.\n     */\n    function add512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n        assembly (\"memory-safe\") {\n            low := add(a, b)\n            high := lt(low, a)\n        }\n    }\n\n    /**\n     * @dev Return the 512-bit multiplication of two uint256.\n     *\n     * The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low.\n     */\n    function mul512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n        // 512-bit multiply [high low] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use\n        // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n        // variables such that product = high * 2²⁵⁶ + low.\n        assembly (\"memory-safe\") {\n            let mm := mulmod(a, b, not(0))\n            low := mul(a, b)\n            high := sub(sub(mm, low), lt(mm, low))\n        }\n    }\n\n    /**\n     * @dev Returns the addition of two unsigned integers, with a success flag (no overflow).\n     */\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            uint256 c = a + b;\n            success = c >= a;\n            result = c * SafeCast.toUint(success);\n        }\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow).\n     */\n    function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            uint256 c = a - b;\n            success = c <= a;\n            result = c * SafeCast.toUint(success);\n        }\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow).\n     */\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            uint256 c = a * b;\n            assembly (\"memory-safe\") {\n                // Only true when the multiplication doesn't overflow\n                // (c / a == b) || (a == 0)\n                success := or(eq(div(c, a), b), iszero(a))\n            }\n            // equivalent to: success ? c : 0\n            result = c * SafeCast.toUint(success);\n        }\n    }\n\n    /**\n     * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).\n     */\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            success = b > 0;\n            assembly (\"memory-safe\") {\n                // The `DIV` opcode returns zero when the denominator is 0.\n                result := div(a, b)\n            }\n        }\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).\n     */\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            success = b > 0;\n            assembly (\"memory-safe\") {\n                // The `MOD` opcode returns zero when the denominator is 0.\n                result := mod(a, b)\n            }\n        }\n    }\n\n    /**\n     * @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing.\n     */\n    function saturatingAdd(uint256 a, uint256 b) internal pure returns (uint256) {\n        (bool success, uint256 result) = tryAdd(a, b);\n        return ternary(success, result, type(uint256).max);\n    }\n\n    /**\n     * @dev Unsigned saturating subtraction, bounds to zero instead of overflowing.\n     */\n    function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {\n        (, uint256 result) = trySub(a, b);\n        return result;\n    }\n\n    /**\n     * @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing.\n     */\n    function saturatingMul(uint256 a, uint256 b) internal pure returns (uint256) {\n        (bool success, uint256 result) = tryMul(a, b);\n        return ternary(success, result, type(uint256).max);\n    }\n\n    /**\n     * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n     *\n     * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n     * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n     * one branch when needed, making this function more expensive.\n     */\n    function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {\n        unchecked {\n            // branchless ternary works because:\n            // b ^ (a ^ b) == a\n            // b ^ 0 == b\n            return b ^ ((a ^ b) * SafeCast.toUint(condition));\n        }\n    }\n\n    /**\n     * @dev Returns the largest of two numbers.\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return ternary(a > b, a, b);\n    }\n\n    /**\n     * @dev Returns the smallest of two numbers.\n     */\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return ternary(a < b, a, b);\n    }\n\n    /**\n     * @dev Returns the average of two numbers. The result is rounded towards\n     * zero.\n     */\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b) / 2 can overflow.\n        return (a & b) + (a ^ b) / 2;\n    }\n\n    /**\n     * @dev Returns the ceiling of the division of two numbers.\n     *\n     * This differs from standard division with `/` in that it rounds towards infinity instead\n     * of rounding towards zero.\n     */\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        if (b == 0) {\n            // Guarantee the same behavior as in a regular Solidity division.\n            Panic.panic(Panic.DIVISION_BY_ZERO);\n        }\n\n        // The following calculation ensures accurate ceiling division without overflow.\n        // Since a is non-zero, (a - 1) / b will not overflow.\n        // The largest possible result occurs when (a - 1) / b is type(uint256).max,\n        // but the largest value we can obtain is type(uint256).max - 1, which happens\n        // when a = type(uint256).max and b = 1.\n        unchecked {\n            return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);\n        }\n    }\n\n    /**\n     * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n     * denominator == 0.\n     *\n     * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n     * Uniswap Labs also under MIT license.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n        unchecked {\n            (uint256 high, uint256 low) = mul512(x, y);\n\n            // Handle non-overflow cases, 256 by 256 division.\n            if (high == 0) {\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n                // The surrounding unchecked block does not change this fact.\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n                return low / denominator;\n            }\n\n            // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.\n            if (denominator <= high) {\n                Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));\n            }\n\n            ///////////////////////////////////////////////\n            // 512 by 256 division.\n            ///////////////////////////////////////////////\n\n            // Make division exact by subtracting the remainder from [high low].\n            uint256 remainder;\n            assembly (\"memory-safe\") {\n                // Compute remainder using mulmod.\n                remainder := mulmod(x, y, denominator)\n\n                // Subtract 256 bit number from 512 bit number.\n                high := sub(high, gt(remainder, low))\n                low := sub(low, remainder)\n            }\n\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n            uint256 twos = denominator & (0 - denominator);\n            assembly (\"memory-safe\") {\n                // Divide denominator by twos.\n                denominator := div(denominator, twos)\n\n                // Divide [high low] by twos.\n                low := div(low, twos)\n\n                // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.\n                twos := add(div(sub(0, twos), twos), 1)\n            }\n\n            // Shift in bits from high into low.\n            low |= high * twos;\n\n            // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such\n            // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for\n            // four bits. That is, denominator * inv ≡ 1 mod 2⁴.\n            uint256 inverse = (3 * denominator) ^ 2;\n\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n            // works in modular arithmetic, doubling the correct bits in each step.\n            inverse *= 2 - denominator * inverse; // inverse mod 2⁸\n            inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶\n            inverse *= 2 - denominator * inverse; // inverse mod 2³²\n            inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴\n            inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸\n            inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶\n\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n            // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is\n            // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and high\n            // is no longer required.\n            result = low * inverse;\n            return result;\n        }\n    }\n\n    /**\n     * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n        return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);\n    }\n\n    /**\n     * @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.\n     */\n    function mulShr(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 result) {\n        unchecked {\n            (uint256 high, uint256 low) = mul512(x, y);\n            if (high >= 1 << n) {\n                Panic.panic(Panic.UNDER_OVERFLOW);\n            }\n            return (high << (256 - n)) | (low >> n);\n        }\n    }\n\n    /**\n     * @dev Calculates x * y >> n with full precision, following the selected rounding direction.\n     */\n    function mulShr(uint256 x, uint256 y, uint8 n, Rounding rounding) internal pure returns (uint256) {\n        return mulShr(x, y, n) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, 1 << n) > 0);\n    }\n\n    /**\n     * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n     *\n     * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n     * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n     *\n     * If the input value is not inversible, 0 is returned.\n     *\n     * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n     * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.\n     */\n    function invMod(uint256 a, uint256 n) internal pure returns (uint256) {\n        unchecked {\n            if (n == 0) return 0;\n\n            // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)\n            // Used to compute integers x and y such that: ax + ny = gcd(a, n).\n            // When the gcd is 1, then the inverse of a modulo n exists and it's x.\n            // ax + ny = 1\n            // ax = 1 + (-y)n\n            // ax ≡ 1 (mod n) # x is the inverse of a modulo n\n\n            // If the remainder is 0 the gcd is n right away.\n            uint256 remainder = a % n;\n            uint256 gcd = n;\n\n            // Therefore the initial coefficients are:\n            // ax + ny = gcd(a, n) = n\n            // 0a + 1n = n\n            int256 x = 0;\n            int256 y = 1;\n\n            while (remainder != 0) {\n                uint256 quotient = gcd / remainder;\n\n                (gcd, remainder) = (\n                    // The old remainder is the next gcd to try.\n                    remainder,\n                    // Compute the next remainder.\n                    // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd\n                    // where gcd is at most n (capped to type(uint256).max)\n                    gcd - remainder * quotient\n                );\n\n                (x, y) = (\n                    // Increment the coefficient of a.\n                    y,\n                    // Decrement the coefficient of n.\n                    // Can overflow, but the result is casted to uint256 so that the\n                    // next value of y is \"wrapped around\" to a value between 0 and n - 1.\n                    x - y * int256(quotient)\n                );\n            }\n\n            if (gcd != 1) return 0; // No inverse exists.\n            return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.\n        }\n    }\n\n    /**\n     * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n     *\n     * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n     * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n     * `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n     *\n     * NOTE: this function does NOT check that `p` is a prime greater than `2`.\n     */\n    function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {\n        unchecked {\n            return Math.modExp(a, p - 2, p);\n        }\n    }\n\n    /**\n     * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n     *\n     * Requirements:\n     * - modulus can't be zero\n     * - underlying staticcall to precompile must succeed\n     *\n     * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n     * sure the chain you're using it on supports the precompiled contract for modular exponentiation\n     * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n     * the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n     * interpreted as 0.\n     */\n    function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {\n        (bool success, uint256 result) = tryModExp(b, e, m);\n        if (!success) {\n            Panic.panic(Panic.DIVISION_BY_ZERO);\n        }\n        return result;\n    }\n\n    /**\n     * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n     * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n     * to operate modulo 0 or if the underlying precompile reverted.\n     *\n     * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n     * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n     * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n     * of a revert, but the result may be incorrectly interpreted as 0.\n     */\n    function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {\n        if (m == 0) return (false, 0);\n        assembly (\"memory-safe\") {\n            let ptr := mload(0x40)\n            // | Offset    | Content    | Content (Hex)                                                      |\n            // |-----------|------------|--------------------------------------------------------------------|\n            // | 0x00:0x1f | size of b  | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n            // | 0x20:0x3f | size of e  | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n            // | 0x40:0x5f | size of m  | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n            // | 0x60:0x7f | value of b | 0x<.............................................................b> |\n            // | 0x80:0x9f | value of e | 0x<.............................................................e> |\n            // | 0xa0:0xbf | value of m | 0x<.............................................................m> |\n            mstore(ptr, 0x20)\n            mstore(add(ptr, 0x20), 0x20)\n            mstore(add(ptr, 0x40), 0x20)\n            mstore(add(ptr, 0x60), b)\n            mstore(add(ptr, 0x80), e)\n            mstore(add(ptr, 0xa0), m)\n\n            // Given the result < m, it's guaranteed to fit in 32 bytes,\n            // so we can use the memory scratch space located at offset 0.\n            success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)\n            result := mload(0x00)\n        }\n    }\n\n    /**\n     * @dev Variant of {modExp} that supports inputs of arbitrary length.\n     */\n    function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {\n        (bool success, bytes memory result) = tryModExp(b, e, m);\n        if (!success) {\n            Panic.panic(Panic.DIVISION_BY_ZERO);\n        }\n        return result;\n    }\n\n    /**\n     * @dev Variant of {tryModExp} that supports inputs of arbitrary length.\n     */\n    function tryModExp(\n        bytes memory b,\n        bytes memory e,\n        bytes memory m\n    ) internal view returns (bool success, bytes memory result) {\n        if (_zeroBytes(m)) return (false, new bytes(0));\n\n        uint256 mLen = m.length;\n\n        // Encode call args in result and move the free memory pointer\n        result = abi.encodePacked(b.length, e.length, mLen, b, e, m);\n\n        assembly (\"memory-safe\") {\n            let dataPtr := add(result, 0x20)\n            // Write result on top of args to avoid allocating extra memory.\n            success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)\n            // Overwrite the length.\n            // result.length > returndatasize() is guaranteed because returndatasize() == m.length\n            mstore(result, mLen)\n            // Set the memory pointer after the returned data.\n            mstore(0x40, add(dataPtr, mLen))\n        }\n    }\n\n    /**\n     * @dev Returns whether the provided byte array is zero.\n     */\n    function _zeroBytes(bytes memory byteArray) private pure returns (bool) {\n        for (uint256 i = 0; i < byteArray.length; ++i) {\n            if (byteArray[i] != 0) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n     * towards zero.\n     *\n     * This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n     * using integer operations.\n     */\n    function sqrt(uint256 a) internal pure returns (uint256) {\n        unchecked {\n            // Take care of easy edge cases when a == 0 or a == 1\n            if (a <= 1) {\n                return a;\n            }\n\n            // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a\n            // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between\n            // the current value as `ε_n = | x_n - sqrt(a) |`.\n            //\n            // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root\n            // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is\n            // bigger than any uint256.\n            //\n            // By noticing that\n            // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`\n            // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar\n            // to the msb function.\n            uint256 aa = a;\n            uint256 xn = 1;\n\n            if (aa >= (1 << 128)) {\n                aa >>= 128;\n                xn <<= 64;\n            }\n            if (aa >= (1 << 64)) {\n                aa >>= 64;\n                xn <<= 32;\n            }\n            if (aa >= (1 << 32)) {\n                aa >>= 32;\n                xn <<= 16;\n            }\n            if (aa >= (1 << 16)) {\n                aa >>= 16;\n                xn <<= 8;\n            }\n            if (aa >= (1 << 8)) {\n                aa >>= 8;\n                xn <<= 4;\n            }\n            if (aa >= (1 << 4)) {\n                aa >>= 4;\n                xn <<= 2;\n            }\n            if (aa >= (1 << 2)) {\n                xn <<= 1;\n            }\n\n            // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).\n            //\n            // We can refine our estimation by noticing that the middle of that interval minimizes the error.\n            // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).\n            // This is going to be our x_0 (and ε_0)\n            xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)\n\n            // From here, Newton's method give us:\n            // x_{n+1} = (x_n + a / x_n) / 2\n            //\n            // One should note that:\n            // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a\n            //              = ((x_n² + a) / (2 * x_n))² - a\n            //              = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a\n            //              = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)\n            //              = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)\n            //              = (x_n² - a)² / (2 * x_n)²\n            //              = ((x_n² - a) / (2 * x_n))²\n            //              ≥ 0\n            // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n\n            //\n            // This gives us the proof of quadratic convergence of the sequence:\n            // ε_{n+1} = | x_{n+1} - sqrt(a) |\n            //         = | (x_n + a / x_n) / 2 - sqrt(a) |\n            //         = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |\n            //         = | (x_n - sqrt(a))² / (2 * x_n) |\n            //         = | ε_n² / (2 * x_n) |\n            //         = ε_n² / | (2 * x_n) |\n            //\n            // For the first iteration, we have a special case where x_0 is known:\n            // ε_1 = ε_0² / | (2 * x_0) |\n            //     ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))\n            //     ≤ 2**(2*e-4) / (3 * 2**(e-1))\n            //     ≤ 2**(e-3) / 3\n            //     ≤ 2**(e-3-log2(3))\n            //     ≤ 2**(e-4.5)\n            //\n            // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:\n            // ε_{n+1} = ε_n² / | (2 * x_n) |\n            //         ≤ (2**(e-k))² / (2 * 2**(e-1))\n            //         ≤ 2**(2*e-2*k) / 2**e\n            //         ≤ 2**(e-2*k)\n            xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5)  -- special case, see above\n            xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9)    -- general case with k = 4.5\n            xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18)   -- general case with k = 9\n            xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36)   -- general case with k = 18\n            xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72)   -- general case with k = 36\n            xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144)  -- general case with k = 72\n\n            // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision\n            // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either\n            // sqrt(a) or sqrt(a) + 1.\n            return xn - SafeCast.toUint(xn > a / xn);\n        }\n    }\n\n    /**\n     * @dev Calculates sqrt(a), following the selected rounding direction.\n     */\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = sqrt(a);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 x) internal pure returns (uint256 r) {\n        // If value has upper 128 bits set, log2 result is at least 128\n        r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n        // If upper 64 bits of 128-bit half set, add 64 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n        // If upper 32 bits of 64-bit half set, add 32 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n        // If upper 16 bits of 32-bit half set, add 16 to result\n        r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n        // If upper 8 bits of 16-bit half set, add 8 to result\n        r |= SafeCast.toUint((x >> r) > 0xff) << 3;\n        // If upper 4 bits of 8-bit half set, add 4 to result\n        r |= SafeCast.toUint((x >> r) > 0xf) << 2;\n\n        // Shifts value right by the current result and use it as an index into this lookup table:\n        //\n        // | x (4 bits) |  index  | table[index] = MSB position |\n        // |------------|---------|-----------------------------|\n        // |    0000    |    0    |        table[0] = 0         |\n        // |    0001    |    1    |        table[1] = 0         |\n        // |    0010    |    2    |        table[2] = 1         |\n        // |    0011    |    3    |        table[3] = 1         |\n        // |    0100    |    4    |        table[4] = 2         |\n        // |    0101    |    5    |        table[5] = 2         |\n        // |    0110    |    6    |        table[6] = 2         |\n        // |    0111    |    7    |        table[7] = 2         |\n        // |    1000    |    8    |        table[8] = 3         |\n        // |    1001    |    9    |        table[9] = 3         |\n        // |    1010    |   10    |        table[10] = 3        |\n        // |    1011    |   11    |        table[11] = 3        |\n        // |    1100    |   12    |        table[12] = 3        |\n        // |    1101    |   13    |        table[13] = 3        |\n        // |    1110    |   14    |        table[14] = 3        |\n        // |    1111    |   15    |        table[15] = 3        |\n        //\n        // The lookup table is represented as a 32-byte value with the MSB positions for 0-15 in the last 16 bytes.\n        assembly (\"memory-safe\") {\n            r := or(r, byte(shr(r, x), 0x0000010102020202030303030303030300000000000000000000000000000000))\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log2(value);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >= 10 ** 64) {\n                value /= 10 ** 64;\n                result += 64;\n            }\n            if (value >= 10 ** 32) {\n                value /= 10 ** 32;\n                result += 32;\n            }\n            if (value >= 10 ** 16) {\n                value /= 10 ** 16;\n                result += 16;\n            }\n            if (value >= 10 ** 8) {\n                value /= 10 ** 8;\n                result += 8;\n            }\n            if (value >= 10 ** 4) {\n                value /= 10 ** 4;\n                result += 4;\n            }\n            if (value >= 10 ** 2) {\n                value /= 10 ** 2;\n                result += 2;\n            }\n            if (value >= 10 ** 1) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log10(value);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\n     * Returns 0 if given 0.\n     *\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n     */\n    function log256(uint256 x) internal pure returns (uint256 r) {\n        // If value has upper 128 bits set, log2 result is at least 128\n        r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n        // If upper 64 bits of 128-bit half set, add 64 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n        // If upper 32 bits of 64-bit half set, add 32 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n        // If upper 16 bits of 32-bit half set, add 16 to result\n        r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n        // Add 1 if upper 8 bits of 16-bit half set, and divide accumulated result by 8\n        return (r >> 3) | SafeCast.toUint((x >> r) > 0xff);\n    }\n\n    /**\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log256(value);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);\n        }\n    }\n\n    /**\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n     */\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n        return uint8(rounding) % 2 == 1;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/math/SafeCast.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n    /**\n     * @dev Value doesn't fit in an uint of `bits` size.\n     */\n    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n    /**\n     * @dev An int value doesn't fit in an uint of `bits` size.\n     */\n    error SafeCastOverflowedIntToUint(int256 value);\n\n    /**\n     * @dev Value doesn't fit in an int of `bits` size.\n     */\n    error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n    /**\n     * @dev An uint value doesn't fit in an int of `bits` size.\n     */\n    error SafeCastOverflowedUintToInt(uint256 value);\n\n    /**\n     * @dev Returns the downcasted uint248 from uint256, reverting on\n     * overflow (when the input is greater than largest uint248).\n     *\n     * Counterpart to Solidity's `uint248` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 248 bits\n     */\n    function toUint248(uint256 value) internal pure returns (uint248) {\n        if (value > type(uint248).max) {\n            revert SafeCastOverflowedUintDowncast(248, value);\n        }\n        return uint248(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint240 from uint256, reverting on\n     * overflow (when the input is greater than largest uint240).\n     *\n     * Counterpart to Solidity's `uint240` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 240 bits\n     */\n    function toUint240(uint256 value) internal pure returns (uint240) {\n        if (value > type(uint240).max) {\n            revert SafeCastOverflowedUintDowncast(240, value);\n        }\n        return uint240(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint232 from uint256, reverting on\n     * overflow (when the input is greater than largest uint232).\n     *\n     * Counterpart to Solidity's `uint232` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 232 bits\n     */\n    function toUint232(uint256 value) internal pure returns (uint232) {\n        if (value > type(uint232).max) {\n            revert SafeCastOverflowedUintDowncast(232, value);\n        }\n        return uint232(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint224 from uint256, reverting on\n     * overflow (when the input is greater than largest uint224).\n     *\n     * Counterpart to Solidity's `uint224` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     */\n    function toUint224(uint256 value) internal pure returns (uint224) {\n        if (value > type(uint224).max) {\n            revert SafeCastOverflowedUintDowncast(224, value);\n        }\n        return uint224(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint216 from uint256, reverting on\n     * overflow (when the input is greater than largest uint216).\n     *\n     * Counterpart to Solidity's `uint216` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 216 bits\n     */\n    function toUint216(uint256 value) internal pure returns (uint216) {\n        if (value > type(uint216).max) {\n            revert SafeCastOverflowedUintDowncast(216, value);\n        }\n        return uint216(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint208 from uint256, reverting on\n     * overflow (when the input is greater than largest uint208).\n     *\n     * Counterpart to Solidity's `uint208` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 208 bits\n     */\n    function toUint208(uint256 value) internal pure returns (uint208) {\n        if (value > type(uint208).max) {\n            revert SafeCastOverflowedUintDowncast(208, value);\n        }\n        return uint208(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint200 from uint256, reverting on\n     * overflow (when the input is greater than largest uint200).\n     *\n     * Counterpart to Solidity's `uint200` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 200 bits\n     */\n    function toUint200(uint256 value) internal pure returns (uint200) {\n        if (value > type(uint200).max) {\n            revert SafeCastOverflowedUintDowncast(200, value);\n        }\n        return uint200(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint192 from uint256, reverting on\n     * overflow (when the input is greater than largest uint192).\n     *\n     * Counterpart to Solidity's `uint192` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 192 bits\n     */\n    function toUint192(uint256 value) internal pure returns (uint192) {\n        if (value > type(uint192).max) {\n            revert SafeCastOverflowedUintDowncast(192, value);\n        }\n        return uint192(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint184 from uint256, reverting on\n     * overflow (when the input is greater than largest uint184).\n     *\n     * Counterpart to Solidity's `uint184` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 184 bits\n     */\n    function toUint184(uint256 value) internal pure returns (uint184) {\n        if (value > type(uint184).max) {\n            revert SafeCastOverflowedUintDowncast(184, value);\n        }\n        return uint184(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint176 from uint256, reverting on\n     * overflow (when the input is greater than largest uint176).\n     *\n     * Counterpart to Solidity's `uint176` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 176 bits\n     */\n    function toUint176(uint256 value) internal pure returns (uint176) {\n        if (value > type(uint176).max) {\n            revert SafeCastOverflowedUintDowncast(176, value);\n        }\n        return uint176(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint168 from uint256, reverting on\n     * overflow (when the input is greater than largest uint168).\n     *\n     * Counterpart to Solidity's `uint168` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 168 bits\n     */\n    function toUint168(uint256 value) internal pure returns (uint168) {\n        if (value > type(uint168).max) {\n            revert SafeCastOverflowedUintDowncast(168, value);\n        }\n        return uint168(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint160 from uint256, reverting on\n     * overflow (when the input is greater than largest uint160).\n     *\n     * Counterpart to Solidity's `uint160` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 160 bits\n     */\n    function toUint160(uint256 value) internal pure returns (uint160) {\n        if (value > type(uint160).max) {\n            revert SafeCastOverflowedUintDowncast(160, value);\n        }\n        return uint160(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint152 from uint256, reverting on\n     * overflow (when the input is greater than largest uint152).\n     *\n     * Counterpart to Solidity's `uint152` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 152 bits\n     */\n    function toUint152(uint256 value) internal pure returns (uint152) {\n        if (value > type(uint152).max) {\n            revert SafeCastOverflowedUintDowncast(152, value);\n        }\n        return uint152(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint144 from uint256, reverting on\n     * overflow (when the input is greater than largest uint144).\n     *\n     * Counterpart to Solidity's `uint144` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 144 bits\n     */\n    function toUint144(uint256 value) internal pure returns (uint144) {\n        if (value > type(uint144).max) {\n            revert SafeCastOverflowedUintDowncast(144, value);\n        }\n        return uint144(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint136 from uint256, reverting on\n     * overflow (when the input is greater than largest uint136).\n     *\n     * Counterpart to Solidity's `uint136` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 136 bits\n     */\n    function toUint136(uint256 value) internal pure returns (uint136) {\n        if (value > type(uint136).max) {\n            revert SafeCastOverflowedUintDowncast(136, value);\n        }\n        return uint136(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint128 from uint256, reverting on\n     * overflow (when the input is greater than largest uint128).\n     *\n     * Counterpart to Solidity's `uint128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     */\n    function toUint128(uint256 value) internal pure returns (uint128) {\n        if (value > type(uint128).max) {\n            revert SafeCastOverflowedUintDowncast(128, value);\n        }\n        return uint128(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint120 from uint256, reverting on\n     * overflow (when the input is greater than largest uint120).\n     *\n     * Counterpart to Solidity's `uint120` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 120 bits\n     */\n    function toUint120(uint256 value) internal pure returns (uint120) {\n        if (value > type(uint120).max) {\n            revert SafeCastOverflowedUintDowncast(120, value);\n        }\n        return uint120(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint112 from uint256, reverting on\n     * overflow (when the input is greater than largest uint112).\n     *\n     * Counterpart to Solidity's `uint112` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 112 bits\n     */\n    function toUint112(uint256 value) internal pure returns (uint112) {\n        if (value > type(uint112).max) {\n            revert SafeCastOverflowedUintDowncast(112, value);\n        }\n        return uint112(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint104 from uint256, reverting on\n     * overflow (when the input is greater than largest uint104).\n     *\n     * Counterpart to Solidity's `uint104` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 104 bits\n     */\n    function toUint104(uint256 value) internal pure returns (uint104) {\n        if (value > type(uint104).max) {\n            revert SafeCastOverflowedUintDowncast(104, value);\n        }\n        return uint104(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint96 from uint256, reverting on\n     * overflow (when the input is greater than largest uint96).\n     *\n     * Counterpart to Solidity's `uint96` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 96 bits\n     */\n    function toUint96(uint256 value) internal pure returns (uint96) {\n        if (value > type(uint96).max) {\n            revert SafeCastOverflowedUintDowncast(96, value);\n        }\n        return uint96(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint88 from uint256, reverting on\n     * overflow (when the input is greater than largest uint88).\n     *\n     * Counterpart to Solidity's `uint88` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 88 bits\n     */\n    function toUint88(uint256 value) internal pure returns (uint88) {\n        if (value > type(uint88).max) {\n            revert SafeCastOverflowedUintDowncast(88, value);\n        }\n        return uint88(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint80 from uint256, reverting on\n     * overflow (when the input is greater than largest uint80).\n     *\n     * Counterpart to Solidity's `uint80` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 80 bits\n     */\n    function toUint80(uint256 value) internal pure returns (uint80) {\n        if (value > type(uint80).max) {\n            revert SafeCastOverflowedUintDowncast(80, value);\n        }\n        return uint80(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint72 from uint256, reverting on\n     * overflow (when the input is greater than largest uint72).\n     *\n     * Counterpart to Solidity's `uint72` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 72 bits\n     */\n    function toUint72(uint256 value) internal pure returns (uint72) {\n        if (value > type(uint72).max) {\n            revert SafeCastOverflowedUintDowncast(72, value);\n        }\n        return uint72(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint64 from uint256, reverting on\n     * overflow (when the input is greater than largest uint64).\n     *\n     * Counterpart to Solidity's `uint64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     */\n    function toUint64(uint256 value) internal pure returns (uint64) {\n        if (value > type(uint64).max) {\n            revert SafeCastOverflowedUintDowncast(64, value);\n        }\n        return uint64(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint56 from uint256, reverting on\n     * overflow (when the input is greater than largest uint56).\n     *\n     * Counterpart to Solidity's `uint56` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 56 bits\n     */\n    function toUint56(uint256 value) internal pure returns (uint56) {\n        if (value > type(uint56).max) {\n            revert SafeCastOverflowedUintDowncast(56, value);\n        }\n        return uint56(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint48 from uint256, reverting on\n     * overflow (when the input is greater than largest uint48).\n     *\n     * Counterpart to Solidity's `uint48` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 48 bits\n     */\n    function toUint48(uint256 value) internal pure returns (uint48) {\n        if (value > type(uint48).max) {\n            revert SafeCastOverflowedUintDowncast(48, value);\n        }\n        return uint48(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint40 from uint256, reverting on\n     * overflow (when the input is greater than largest uint40).\n     *\n     * Counterpart to Solidity's `uint40` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 40 bits\n     */\n    function toUint40(uint256 value) internal pure returns (uint40) {\n        if (value > type(uint40).max) {\n            revert SafeCastOverflowedUintDowncast(40, value);\n        }\n        return uint40(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint32 from uint256, reverting on\n     * overflow (when the input is greater than largest uint32).\n     *\n     * Counterpart to Solidity's `uint32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     */\n    function toUint32(uint256 value) internal pure returns (uint32) {\n        if (value > type(uint32).max) {\n            revert SafeCastOverflowedUintDowncast(32, value);\n        }\n        return uint32(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint24 from uint256, reverting on\n     * overflow (when the input is greater than largest uint24).\n     *\n     * Counterpart to Solidity's `uint24` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 24 bits\n     */\n    function toUint24(uint256 value) internal pure returns (uint24) {\n        if (value > type(uint24).max) {\n            revert SafeCastOverflowedUintDowncast(24, value);\n        }\n        return uint24(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint16 from uint256, reverting on\n     * overflow (when the input is greater than largest uint16).\n     *\n     * Counterpart to Solidity's `uint16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     */\n    function toUint16(uint256 value) internal pure returns (uint16) {\n        if (value > type(uint16).max) {\n            revert SafeCastOverflowedUintDowncast(16, value);\n        }\n        return uint16(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint8 from uint256, reverting on\n     * overflow (when the input is greater than largest uint8).\n     *\n     * Counterpart to Solidity's `uint8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits\n     */\n    function toUint8(uint256 value) internal pure returns (uint8) {\n        if (value > type(uint8).max) {\n            revert SafeCastOverflowedUintDowncast(8, value);\n        }\n        return uint8(value);\n    }\n\n    /**\n     * @dev Converts a signed int256 into an unsigned uint256.\n     *\n     * Requirements:\n     *\n     * - input must be greater than or equal to 0.\n     */\n    function toUint256(int256 value) internal pure returns (uint256) {\n        if (value < 0) {\n            revert SafeCastOverflowedIntToUint(value);\n        }\n        return uint256(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int248 from int256, reverting on\n     * overflow (when the input is less than smallest int248 or\n     * greater than largest int248).\n     *\n     * Counterpart to Solidity's `int248` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 248 bits\n     */\n    function toInt248(int256 value) internal pure returns (int248 downcasted) {\n        downcasted = int248(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(248, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int240 from int256, reverting on\n     * overflow (when the input is less than smallest int240 or\n     * greater than largest int240).\n     *\n     * Counterpart to Solidity's `int240` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 240 bits\n     */\n    function toInt240(int256 value) internal pure returns (int240 downcasted) {\n        downcasted = int240(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(240, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int232 from int256, reverting on\n     * overflow (when the input is less than smallest int232 or\n     * greater than largest int232).\n     *\n     * Counterpart to Solidity's `int232` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 232 bits\n     */\n    function toInt232(int256 value) internal pure returns (int232 downcasted) {\n        downcasted = int232(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(232, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int224 from int256, reverting on\n     * overflow (when the input is less than smallest int224 or\n     * greater than largest int224).\n     *\n     * Counterpart to Solidity's `int224` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     */\n    function toInt224(int256 value) internal pure returns (int224 downcasted) {\n        downcasted = int224(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(224, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int216 from int256, reverting on\n     * overflow (when the input is less than smallest int216 or\n     * greater than largest int216).\n     *\n     * Counterpart to Solidity's `int216` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 216 bits\n     */\n    function toInt216(int256 value) internal pure returns (int216 downcasted) {\n        downcasted = int216(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(216, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int208 from int256, reverting on\n     * overflow (when the input is less than smallest int208 or\n     * greater than largest int208).\n     *\n     * Counterpart to Solidity's `int208` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 208 bits\n     */\n    function toInt208(int256 value) internal pure returns (int208 downcasted) {\n        downcasted = int208(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(208, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int200 from int256, reverting on\n     * overflow (when the input is less than smallest int200 or\n     * greater than largest int200).\n     *\n     * Counterpart to Solidity's `int200` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 200 bits\n     */\n    function toInt200(int256 value) internal pure returns (int200 downcasted) {\n        downcasted = int200(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(200, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int192 from int256, reverting on\n     * overflow (when the input is less than smallest int192 or\n     * greater than largest int192).\n     *\n     * Counterpart to Solidity's `int192` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 192 bits\n     */\n    function toInt192(int256 value) internal pure returns (int192 downcasted) {\n        downcasted = int192(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(192, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int184 from int256, reverting on\n     * overflow (when the input is less than smallest int184 or\n     * greater than largest int184).\n     *\n     * Counterpart to Solidity's `int184` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 184 bits\n     */\n    function toInt184(int256 value) internal pure returns (int184 downcasted) {\n        downcasted = int184(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(184, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int176 from int256, reverting on\n     * overflow (when the input is less than smallest int176 or\n     * greater than largest int176).\n     *\n     * Counterpart to Solidity's `int176` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 176 bits\n     */\n    function toInt176(int256 value) internal pure returns (int176 downcasted) {\n        downcasted = int176(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(176, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int168 from int256, reverting on\n     * overflow (when the input is less than smallest int168 or\n     * greater than largest int168).\n     *\n     * Counterpart to Solidity's `int168` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 168 bits\n     */\n    function toInt168(int256 value) internal pure returns (int168 downcasted) {\n        downcasted = int168(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(168, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int160 from int256, reverting on\n     * overflow (when the input is less than smallest int160 or\n     * greater than largest int160).\n     *\n     * Counterpart to Solidity's `int160` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 160 bits\n     */\n    function toInt160(int256 value) internal pure returns (int160 downcasted) {\n        downcasted = int160(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(160, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int152 from int256, reverting on\n     * overflow (when the input is less than smallest int152 or\n     * greater than largest int152).\n     *\n     * Counterpart to Solidity's `int152` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 152 bits\n     */\n    function toInt152(int256 value) internal pure returns (int152 downcasted) {\n        downcasted = int152(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(152, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int144 from int256, reverting on\n     * overflow (when the input is less than smallest int144 or\n     * greater than largest int144).\n     *\n     * Counterpart to Solidity's `int144` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 144 bits\n     */\n    function toInt144(int256 value) internal pure returns (int144 downcasted) {\n        downcasted = int144(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(144, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int136 from int256, reverting on\n     * overflow (when the input is less than smallest int136 or\n     * greater than largest int136).\n     *\n     * Counterpart to Solidity's `int136` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 136 bits\n     */\n    function toInt136(int256 value) internal pure returns (int136 downcasted) {\n        downcasted = int136(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(136, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int128 from int256, reverting on\n     * overflow (when the input is less than smallest int128 or\n     * greater than largest int128).\n     *\n     * Counterpart to Solidity's `int128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     */\n    function toInt128(int256 value) internal pure returns (int128 downcasted) {\n        downcasted = int128(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(128, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int120 from int256, reverting on\n     * overflow (when the input is less than smallest int120 or\n     * greater than largest int120).\n     *\n     * Counterpart to Solidity's `int120` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 120 bits\n     */\n    function toInt120(int256 value) internal pure returns (int120 downcasted) {\n        downcasted = int120(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(120, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int112 from int256, reverting on\n     * overflow (when the input is less than smallest int112 or\n     * greater than largest int112).\n     *\n     * Counterpart to Solidity's `int112` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 112 bits\n     */\n    function toInt112(int256 value) internal pure returns (int112 downcasted) {\n        downcasted = int112(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(112, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int104 from int256, reverting on\n     * overflow (when the input is less than smallest int104 or\n     * greater than largest int104).\n     *\n     * Counterpart to Solidity's `int104` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 104 bits\n     */\n    function toInt104(int256 value) internal pure returns (int104 downcasted) {\n        downcasted = int104(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(104, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int96 from int256, reverting on\n     * overflow (when the input is less than smallest int96 or\n     * greater than largest int96).\n     *\n     * Counterpart to Solidity's `int96` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 96 bits\n     */\n    function toInt96(int256 value) internal pure returns (int96 downcasted) {\n        downcasted = int96(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(96, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int88 from int256, reverting on\n     * overflow (when the input is less than smallest int88 or\n     * greater than largest int88).\n     *\n     * Counterpart to Solidity's `int88` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 88 bits\n     */\n    function toInt88(int256 value) internal pure returns (int88 downcasted) {\n        downcasted = int88(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(88, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int80 from int256, reverting on\n     * overflow (when the input is less than smallest int80 or\n     * greater than largest int80).\n     *\n     * Counterpart to Solidity's `int80` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 80 bits\n     */\n    function toInt80(int256 value) internal pure returns (int80 downcasted) {\n        downcasted = int80(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(80, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int72 from int256, reverting on\n     * overflow (when the input is less than smallest int72 or\n     * greater than largest int72).\n     *\n     * Counterpart to Solidity's `int72` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 72 bits\n     */\n    function toInt72(int256 value) internal pure returns (int72 downcasted) {\n        downcasted = int72(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(72, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int64 from int256, reverting on\n     * overflow (when the input is less than smallest int64 or\n     * greater than largest int64).\n     *\n     * Counterpart to Solidity's `int64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     */\n    function toInt64(int256 value) internal pure returns (int64 downcasted) {\n        downcasted = int64(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(64, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int56 from int256, reverting on\n     * overflow (when the input is less than smallest int56 or\n     * greater than largest int56).\n     *\n     * Counterpart to Solidity's `int56` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 56 bits\n     */\n    function toInt56(int256 value) internal pure returns (int56 downcasted) {\n        downcasted = int56(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(56, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int48 from int256, reverting on\n     * overflow (when the input is less than smallest int48 or\n     * greater than largest int48).\n     *\n     * Counterpart to Solidity's `int48` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 48 bits\n     */\n    function toInt48(int256 value) internal pure returns (int48 downcasted) {\n        downcasted = int48(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(48, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int40 from int256, reverting on\n     * overflow (when the input is less than smallest int40 or\n     * greater than largest int40).\n     *\n     * Counterpart to Solidity's `int40` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 40 bits\n     */\n    function toInt40(int256 value) internal pure returns (int40 downcasted) {\n        downcasted = int40(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(40, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int32 from int256, reverting on\n     * overflow (when the input is less than smallest int32 or\n     * greater than largest int32).\n     *\n     * Counterpart to Solidity's `int32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     */\n    function toInt32(int256 value) internal pure returns (int32 downcasted) {\n        downcasted = int32(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(32, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int24 from int256, reverting on\n     * overflow (when the input is less than smallest int24 or\n     * greater than largest int24).\n     *\n     * Counterpart to Solidity's `int24` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 24 bits\n     */\n    function toInt24(int256 value) internal pure returns (int24 downcasted) {\n        downcasted = int24(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(24, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int16 from int256, reverting on\n     * overflow (when the input is less than smallest int16 or\n     * greater than largest int16).\n     *\n     * Counterpart to Solidity's `int16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     */\n    function toInt16(int256 value) internal pure returns (int16 downcasted) {\n        downcasted = int16(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(16, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int8 from int256, reverting on\n     * overflow (when the input is less than smallest int8 or\n     * greater than largest int8).\n     *\n     * Counterpart to Solidity's `int8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits\n     */\n    function toInt8(int256 value) internal pure returns (int8 downcasted) {\n        downcasted = int8(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(8, value);\n        }\n    }\n\n    /**\n     * @dev Converts an unsigned uint256 into a signed int256.\n     *\n     * Requirements:\n     *\n     * - input must be less than or equal to maxInt256.\n     */\n    function toInt256(uint256 value) internal pure returns (int256) {\n        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n        if (value > uint256(type(int256).max)) {\n            revert SafeCastOverflowedUintToInt(value);\n        }\n        return int256(value);\n    }\n\n    /**\n     * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.\n     */\n    function toUint(bool b) internal pure returns (uint256 u) {\n        assembly (\"memory-safe\") {\n            u := iszero(iszero(b))\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n    /**\n     * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n     *\n     * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n     * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n     * one branch when needed, making this function more expensive.\n     */\n    function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {\n        unchecked {\n            // branchless ternary works because:\n            // b ^ (a ^ b) == a\n            // b ^ 0 == b\n            return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));\n        }\n    }\n\n    /**\n     * @dev Returns the largest of two signed numbers.\n     */\n    function max(int256 a, int256 b) internal pure returns (int256) {\n        return ternary(a > b, a, b);\n    }\n\n    /**\n     * @dev Returns the smallest of two signed numbers.\n     */\n    function min(int256 a, int256 b) internal pure returns (int256) {\n        return ternary(a < b, a, b);\n    }\n\n    /**\n     * @dev Returns the average of two signed numbers without overflow.\n     * The result is rounded towards zero.\n     */\n    function average(int256 a, int256 b) internal pure returns (int256) {\n        // Formula from the book \"Hacker's Delight\"\n        int256 x = (a & b) + ((a ^ b) >> 1);\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\n    }\n\n    /**\n     * @dev Returns the absolute unsigned value of a signed value.\n     */\n    function abs(int256 n) internal pure returns (uint256) {\n        unchecked {\n            // Formula from the \"Bit Twiddling Hacks\" by Sean Eron Anderson.\n            // Since `n` is a signed integer, the generated bytecode will use the SAR opcode to perform the right shift,\n            // taking advantage of the most significant (or \"sign\" bit) in two's complement representation.\n            // This opcode adds new most significant bits set to the value of the previous most significant bit. As a result,\n            // the mask will either be `bytes32(0)` (if n is positive) or `~bytes32(0)` (if n is negative).\n            int256 mask = n >> 255;\n\n            // A `bytes32(0)` mask leaves the input unchanged, while a `~bytes32(0)` mask complements it.\n            return uint256((n + mask) ^ mask);\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Panic.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper library for emitting standardized panic codes.\n *\n * ```solidity\n * contract Example {\n *      using Panic for uint256;\n *\n *      // Use any of the declared internal constants\n *      function foo() { Panic.GENERIC.panic(); }\n *\n *      // Alternatively\n *      function foo() { Panic.panic(Panic.GENERIC); }\n * }\n * ```\n *\n * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n *\n * _Available since v5.1._\n */\n// slither-disable-next-line unused-state\nlibrary Panic {\n    /// @dev generic / unspecified error\n    uint256 internal constant GENERIC = 0x00;\n    /// @dev used by the assert() builtin\n    uint256 internal constant ASSERT = 0x01;\n    /// @dev arithmetic underflow or overflow\n    uint256 internal constant UNDER_OVERFLOW = 0x11;\n    /// @dev division or modulo by zero\n    uint256 internal constant DIVISION_BY_ZERO = 0x12;\n    /// @dev enum conversion error\n    uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;\n    /// @dev invalid encoding in storage\n    uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;\n    /// @dev empty array pop\n    uint256 internal constant EMPTY_ARRAY_POP = 0x31;\n    /// @dev array out of bounds access\n    uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;\n    /// @dev resource error (too large allocation or too large array)\n    uint256 internal constant RESOURCE_ERROR = 0x41;\n    /// @dev calling invalid internal function\n    uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;\n\n    /// @dev Reverts with a panic code. Recommended to use with\n    /// the internal constants with predefined codes.\n    function panic(uint256 code) internal pure {\n        assembly (\"memory-safe\") {\n            mstore(0x00, 0x4e487b71)\n            mstore(0x20, code)\n            revert(0x1c, 0x24)\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Pausable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n    bool private _paused;\n\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    /**\n     * @dev The operation failed because the contract is paused.\n     */\n    error EnforcedPause();\n\n    /**\n     * @dev The operation failed because the contract is not paused.\n     */\n    error ExpectedPause();\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is not paused.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    modifier whenNotPaused() {\n        _requireNotPaused();\n        _;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is paused.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    modifier whenPaused() {\n        _requirePaused();\n        _;\n    }\n\n    /**\n     * @dev Returns true if the contract is paused, and false otherwise.\n     */\n    function paused() public view virtual returns (bool) {\n        return _paused;\n    }\n\n    /**\n     * @dev Throws if the contract is paused.\n     */\n    function _requireNotPaused() internal view virtual {\n        if (paused()) {\n            revert EnforcedPause();\n        }\n    }\n\n    /**\n     * @dev Throws if the contract is not paused.\n     */\n    function _requirePaused() internal view virtual {\n        if (!paused()) {\n            revert ExpectedPause();\n        }\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual whenNotPaused {\n        _paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual whenPaused {\n        _paused = false;\n        emit Unpaused(_msgSender());\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n * consider using {ReentrancyGuardTransient} instead.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant NOT_ENTERED = 1;\n    uint256 private constant ENTERED = 2;\n\n    uint256 private _status;\n\n    /**\n     * @dev Unauthorized reentrant call.\n     */\n    error ReentrancyGuardReentrantCall();\n\n    constructor() {\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\n        if (_status == ENTERED) {\n            revert ReentrancyGuardReentrantCall();\n        }\n\n        // Any calls to nonReentrant after this point will fail\n        _status = ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        return _status == ENTERED;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SafeCast} from \"./math/SafeCast.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n    using SafeCast for *;\n\n    bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n    uint8 private constant ADDRESS_LENGTH = 20;\n    uint256 private constant SPECIAL_CHARS_LOOKUP =\n        (1 << 0x08) | // backspace\n            (1 << 0x09) | // tab\n            (1 << 0x0a) | // newline\n            (1 << 0x0c) | // form feed\n            (1 << 0x0d) | // carriage return\n            (1 << 0x22) | // double quote\n            (1 << 0x5c); // backslash\n\n    /**\n     * @dev The `value` string doesn't fit in the specified `length`.\n     */\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n    /**\n     * @dev The string being parsed contains characters that are not in scope of the given base.\n     */\n    error StringsInvalidChar();\n\n    /**\n     * @dev The string being parsed is not a properly formatted address.\n     */\n    error StringsInvalidAddressFormat();\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n     */\n    function toString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            uint256 length = Math.log10(value) + 1;\n            string memory buffer = new string(length);\n            uint256 ptr;\n            assembly (\"memory-safe\") {\n                ptr := add(buffer, add(32, length))\n            }\n            while (true) {\n                ptr--;\n                assembly (\"memory-safe\") {\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n                }\n                value /= 10;\n                if (value == 0) break;\n            }\n            return buffer;\n        }\n    }\n\n    /**\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\n     */\n    function toStringSigned(int256 value) internal pure returns (string memory) {\n        return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n     */\n    function toHexString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            return toHexString(value, Math.log256(value) + 1);\n        }\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n     */\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n        uint256 localValue = value;\n        bytes memory buffer = new bytes(2 * length + 2);\n        buffer[0] = \"0\";\n        buffer[1] = \"x\";\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\n            localValue >>= 4;\n        }\n        if (localValue != 0) {\n            revert StringsInsufficientHexLength(value, length);\n        }\n        return string(buffer);\n    }\n\n    /**\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n     * representation.\n     */\n    function toHexString(address addr) internal pure returns (string memory) {\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n    }\n\n    /**\n     * @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n     * representation, according to EIP-55.\n     */\n    function toChecksumHexString(address addr) internal pure returns (string memory) {\n        bytes memory buffer = bytes(toHexString(addr));\n\n        // hash the hex part of buffer (skip length + 2 bytes, length 40)\n        uint256 hashValue;\n        assembly (\"memory-safe\") {\n            hashValue := shr(96, keccak256(add(buffer, 0x22), 40))\n        }\n\n        for (uint256 i = 41; i > 1; --i) {\n            // possible values for buffer[i] are 48 (0) to 57 (9) and 97 (a) to 102 (f)\n            if (hashValue & 0xf > 7 && uint8(buffer[i]) > 96) {\n                // case shift by xoring with 0x20\n                buffer[i] ^= 0x20;\n            }\n            hashValue >>= 4;\n        }\n        return string(buffer);\n    }\n\n    /**\n     * @dev Returns true if the two strings are equal.\n     */\n    function equal(string memory a, string memory b) internal pure returns (bool) {\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n    }\n\n    /**\n     * @dev Parse a decimal string and returns the value as a `uint256`.\n     *\n     * Requirements:\n     * - The string must be formatted as `[0-9]*`\n     * - The result must fit into an `uint256` type\n     */\n    function parseUint(string memory input) internal pure returns (uint256) {\n        return parseUint(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `[0-9]*`\n     * - The result must fit into an `uint256` type\n     */\n    function parseUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n        (bool success, uint256 value) = tryParseUint(input, begin, end);\n        if (!success) revert StringsInvalidChar();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseUint(string memory input) internal pure returns (bool success, uint256 value) {\n        return _tryParseUintUncheckedBounds(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n     * character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseUint(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, uint256 value) {\n        if (end > bytes(input).length || begin > end) return (false, 0);\n        return _tryParseUintUncheckedBounds(input, begin, end);\n    }\n\n    /**\n     * @dev Implementation of {tryParseUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n     */\n    function _tryParseUintUncheckedBounds(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) private pure returns (bool success, uint256 value) {\n        bytes memory buffer = bytes(input);\n\n        uint256 result = 0;\n        for (uint256 i = begin; i < end; ++i) {\n            uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n            if (chr > 9) return (false, 0);\n            result *= 10;\n            result += chr;\n        }\n        return (true, result);\n    }\n\n    /**\n     * @dev Parse a decimal string and returns the value as a `int256`.\n     *\n     * Requirements:\n     * - The string must be formatted as `[-+]?[0-9]*`\n     * - The result must fit in an `int256` type.\n     */\n    function parseInt(string memory input) internal pure returns (int256) {\n        return parseInt(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `[-+]?[0-9]*`\n     * - The result must fit in an `int256` type.\n     */\n    function parseInt(string memory input, uint256 begin, uint256 end) internal pure returns (int256) {\n        (bool success, int256 value) = tryParseInt(input, begin, end);\n        if (!success) revert StringsInvalidChar();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n     * the result does not fit in a `int256`.\n     *\n     * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n     */\n    function tryParseInt(string memory input) internal pure returns (bool success, int256 value) {\n        return _tryParseIntUncheckedBounds(input, 0, bytes(input).length);\n    }\n\n    uint256 private constant ABS_MIN_INT256 = 2 ** 255;\n\n    /**\n     * @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n     * character or if the result does not fit in a `int256`.\n     *\n     * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n     */\n    function tryParseInt(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, int256 value) {\n        if (end > bytes(input).length || begin > end) return (false, 0);\n        return _tryParseIntUncheckedBounds(input, begin, end);\n    }\n\n    /**\n     * @dev Implementation of {tryParseInt-string-uint256-uint256} that does not check bounds. Caller should make sure that\n     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n     */\n    function _tryParseIntUncheckedBounds(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) private pure returns (bool success, int256 value) {\n        bytes memory buffer = bytes(input);\n\n        // Check presence of a negative sign.\n        bytes1 sign = begin == end ? bytes1(0) : bytes1(_unsafeReadBytesOffset(buffer, begin)); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n        bool positiveSign = sign == bytes1(\"+\");\n        bool negativeSign = sign == bytes1(\"-\");\n        uint256 offset = (positiveSign || negativeSign).toUint();\n\n        (bool absSuccess, uint256 absValue) = tryParseUint(input, begin + offset, end);\n\n        if (absSuccess && absValue < ABS_MIN_INT256) {\n            return (true, negativeSign ? -int256(absValue) : int256(absValue));\n        } else if (absSuccess && negativeSign && absValue == ABS_MIN_INT256) {\n            return (true, type(int256).min);\n        } else return (false, 0);\n    }\n\n    /**\n     * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n     *\n     * Requirements:\n     * - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n     * - The result must fit in an `uint256` type.\n     */\n    function parseHexUint(string memory input) internal pure returns (uint256) {\n        return parseHexUint(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n     * - The result must fit in an `uint256` type.\n     */\n    function parseHexUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n        (bool success, uint256 value) = tryParseHexUint(input, begin, end);\n        if (!success) revert StringsInvalidChar();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseHexUint(string memory input) internal pure returns (bool success, uint256 value) {\n        return _tryParseHexUintUncheckedBounds(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n     * invalid character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseHexUint(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, uint256 value) {\n        if (end > bytes(input).length || begin > end) return (false, 0);\n        return _tryParseHexUintUncheckedBounds(input, begin, end);\n    }\n\n    /**\n     * @dev Implementation of {tryParseHexUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n     */\n    function _tryParseHexUintUncheckedBounds(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) private pure returns (bool success, uint256 value) {\n        bytes memory buffer = bytes(input);\n\n        // skip 0x prefix if present\n        bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(buffer, begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n        uint256 offset = hasPrefix.toUint() * 2;\n\n        uint256 result = 0;\n        for (uint256 i = begin + offset; i < end; ++i) {\n            uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n            if (chr > 15) return (false, 0);\n            result *= 16;\n            unchecked {\n                // Multiplying by 16 is equivalent to a shift of 4 bits (with additional overflow check).\n                // This guarantees that adding a value < 16 will not cause an overflow, hence the unchecked.\n                result += chr;\n            }\n        }\n        return (true, result);\n    }\n\n    /**\n     * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n     *\n     * Requirements:\n     * - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`\n     */\n    function parseAddress(string memory input) internal pure returns (address) {\n        return parseAddress(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`\n     */\n    function parseAddress(string memory input, uint256 begin, uint256 end) internal pure returns (address) {\n        (bool success, address value) = tryParseAddress(input, begin, end);\n        if (!success) revert StringsInvalidAddressFormat();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n     * formatted address. See {parseAddress-string} requirements.\n     */\n    function tryParseAddress(string memory input) internal pure returns (bool success, address value) {\n        return tryParseAddress(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n     * formatted address. See {parseAddress-string-uint256-uint256} requirements.\n     */\n    function tryParseAddress(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, address value) {\n        if (end > bytes(input).length || begin > end) return (false, address(0));\n\n        bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(bytes(input), begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n        uint256 expectedLength = 40 + hasPrefix.toUint() * 2;\n\n        // check that input is the correct length\n        if (end - begin == expectedLength) {\n            // length guarantees that this does not overflow, and value is at most type(uint160).max\n            (bool s, uint256 v) = _tryParseHexUintUncheckedBounds(input, begin, end);\n            return (s, address(uint160(v)));\n        } else {\n            return (false, address(0));\n        }\n    }\n\n    function _tryParseChr(bytes1 chr) private pure returns (uint8) {\n        uint8 value = uint8(chr);\n\n        // Try to parse `chr`:\n        // - Case 1: [0-9]\n        // - Case 2: [a-f]\n        // - Case 3: [A-F]\n        // - otherwise not supported\n        unchecked {\n            if (value > 47 && value < 58) value -= 48;\n            else if (value > 96 && value < 103) value -= 87;\n            else if (value > 64 && value < 71) value -= 55;\n            else return type(uint8).max;\n        }\n\n        return value;\n    }\n\n    /**\n     * @dev Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.\n     *\n     * WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.\n     *\n     * NOTE: This function escapes all unicode characters, and not just the ones in ranges defined in section 2.5 of\n     * RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). ECMAScript's `JSON.parse` does recover escaped unicode\n     * characters that are not in this range, but other tooling may provide different results.\n     */\n    function escapeJSON(string memory input) internal pure returns (string memory) {\n        bytes memory buffer = bytes(input);\n        bytes memory output = new bytes(2 * buffer.length); // worst case scenario\n        uint256 outputLength = 0;\n\n        for (uint256 i; i < buffer.length; ++i) {\n            bytes1 char = bytes1(_unsafeReadBytesOffset(buffer, i));\n            if (((SPECIAL_CHARS_LOOKUP & (1 << uint8(char))) != 0)) {\n                output[outputLength++] = \"\\\\\";\n                if (char == 0x08) output[outputLength++] = \"b\";\n                else if (char == 0x09) output[outputLength++] = \"t\";\n                else if (char == 0x0a) output[outputLength++] = \"n\";\n                else if (char == 0x0c) output[outputLength++] = \"f\";\n                else if (char == 0x0d) output[outputLength++] = \"r\";\n                else if (char == 0x5c) output[outputLength++] = \"\\\\\";\n                else if (char == 0x22) {\n                    // solhint-disable-next-line quotes\n                    output[outputLength++] = '\"';\n                }\n            } else {\n                output[outputLength++] = char;\n            }\n        }\n        // write the actual length and deallocate unused memory\n        assembly (\"memory-safe\") {\n            mstore(output, outputLength)\n            mstore(0x40, add(output, shl(5, shr(5, add(outputLength, 63)))))\n        }\n\n        return string(output);\n    }\n\n    /**\n     * @dev Reads a bytes32 from a bytes array without bounds checking.\n     *\n     * NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n     * assembly block as such would prevent some optimizations.\n     */\n    function _unsafeReadBytesOffset(bytes memory buffer, uint256 offset) private pure returns (bytes32 value) {\n        // This is not memory safe in the general case, but all calls to this private function are within bounds.\n        assembly (\"memory-safe\") {\n            value := mload(add(buffer, add(0x20, offset)))\n        }\n    }\n}\n"
      },
      "contracts/extensions/ERC721Batch.sol": {
        "content": "/**\n * Copyright (C) SettleMint NV - All Rights Reserved\n *\n * Use of this file is strictly prohibited without an active subscription.\n * Distribution of this file, via any medium, is strictly prohibited.\n *\n * For license inquiries, contact hello@settlemint.com\n *\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity ^0.8.24;\n\nimport { ERC721 } from \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\n\nabstract contract ERC721Batch is ERC721 {\n    function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public {\n        for (uint256 i = 0; i < _tokenIds.length; i++) {\n            transferFrom(_from, _to, _tokenIds[i]);\n        }\n    }\n\n    function batchSafeTransferFrom(address _from, address _to, uint256[] memory _tokenIds, bytes memory data_) public {\n        for (uint256 i = 0; i < _tokenIds.length; i++) {\n            safeTransferFrom(_from, _to, _tokenIds[i], data_);\n        }\n    }\n}\n"
      },
      "contracts/extensions/ERC721Freezable.sol": {
        "content": "/**\n * Copyright (C) SettleMint NV - All Rights Reserved\n *\n * Use of this file is strictly prohibited without an active subscription.\n * Distribution of this file, via any medium, is strictly prohibited.\n *\n * For license inquiries, contact hello@settlemint.com\n *\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity ^0.8.24;\n\nimport { ERC721Enumerable } from \"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\";\n\nabstract contract ERC721Freezable is ERC721Enumerable {\n    event PermanentURI(string _value, uint256 indexed _id);\n\n    bool private _isUriFrozen;\n\n    modifier whenURINotFrozen() {\n        require(!frozen(), \"ERC721Freezable: URI is frozen\");\n        _;\n    }\n\n    modifier whenURIFrozen() {\n        require(frozen(), \"ERC721Freezable: URI is not frozen\");\n        _;\n    }\n\n    constructor() {\n        _isUriFrozen = false;\n    }\n\n    function frozen() public view returns (bool) {\n        return _isUriFrozen;\n    }\n\n    function _freeze() internal virtual whenURINotFrozen {\n        _isUriFrozen = true;\n    }\n\n    function freezeToken(uint256 tokenId) public whenURIFrozen {\n        emit PermanentURI(tokenURI(tokenId), tokenId);\n    }\n\n    function freezeAllTokens() public whenURIFrozen {\n        uint256 totalSupply = totalSupply();\n        for (uint256 tokenId = 1; tokenId <= totalSupply; tokenId++) {\n            emit PermanentURI(tokenURI(tokenId), tokenId);\n        }\n    }\n\n    function _update(\n        address to,\n        uint256 tokenId,\n        address auth\n    )\n        internal\n        virtual\n        override(ERC721Enumerable)\n        returns (address)\n    {\n        if (frozen()) {\n            freezeToken(tokenId);\n        }\n        return super._update(to, tokenId, auth);\n    }\n}\n"
      },
      "contracts/extensions/ERC721MintPausable.sol": {
        "content": "/**\n * Copyright (C) SettleMint NV - All Rights Reserved\n *\n * Use of this file is strictly prohibited without an active subscription.\n * Distribution of this file, via any medium, is strictly prohibited.\n *\n * For license inquiries, contact hello@settlemint.com\n *\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity ^0.8.24;\n\nimport { ERC721 } from \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\n\nabstract contract ERC721MintPausable is ERC721 {\n    bool private _mintingPaused;\n\n    event MintPaused(address account);\n    event MintUnpaused(address account);\n\n    modifier whenMintNotPaused() {\n        require(!mintPaused(), \"ERC721MintPausable: Mint paused\");\n        _;\n    }\n\n    modifier whenMintPaused() {\n        require(mintPaused(), \"ERC721MintPausable: Mint not paused\");\n        _;\n    }\n\n    constructor() {\n        _mintingPaused = false;\n    }\n\n    function mintPaused() public view returns (bool) {\n        return _mintingPaused;\n    }\n\n    function _pauseMint() internal virtual whenMintNotPaused {\n        _mintingPaused = true;\n    }\n\n    function _unpauseMint() internal virtual whenMintPaused {\n        _mintingPaused = false;\n    }\n\n    function _update(address to, uint256 tokenId, address auth) internal virtual override(ERC721) returns (address) {\n        address from = super._update(to, tokenId, auth);\n        require((!mintPaused() || from != address(0)), \"ERC721MintPausable: Minting is disabled\");\n        return from;\n    }\n}\n"
      },
      "contracts/extensions/ERC721OpenSeaGassLess.sol": {
        "content": "/**\n * Copyright (C) SettleMint NV - All Rights Reserved\n *\n * Use of this file is strictly prohibited without an active subscription.\n * Distribution of this file, via any medium, is strictly prohibited.\n *\n * For license inquiries, contact hello@settlemint.com\n *\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity ^0.8.24;\n\nimport { ERC721 } from \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\n\nabstract contract ERC721OpenSeaGassLess is ERC721 {\n    address public _proxyRegistryAddress;\n\n    constructor(address proxyRegistryAddress_) {\n        _proxyRegistryAddress = proxyRegistryAddress_;\n    }\n\n    function _setProxyRegistryAddress(address proxyRegistryAddress_) internal virtual {\n        _proxyRegistryAddress = proxyRegistryAddress_;\n    }\n\n    function isApprovedForAll(address _owner, address operator) public view virtual override returns (bool) {\n        if (_proxyRegistryAddress != address(0)) {\n            OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(_proxyRegistryAddress);\n            if (address(proxyRegistry.proxies(_owner)) == operator) {\n                return true;\n            }\n        }\n        return super.isApprovedForAll(_owner, operator);\n    }\n}\n\ncontract OwnableDelegateProxy { }\n\ncontract OpenSeaProxyRegistry {\n    mapping(address => OwnableDelegateProxy) public proxies;\n}\n"
      },
      "contracts/extensions/ERC721Whitelist.sol": {
        "content": "/**\n * Copyright (C) SettleMint NV - All Rights Reserved\n *\n * Use of this file is strictly prohibited without an active subscription.\n * Distribution of this file, via any medium, is strictly prohibited.\n *\n * For license inquiries, contact hello@settlemint.com\n *\n * SPDX-License-Identifier: UNLICENSED\n */\npragma solidity ^0.8.24;\n\nimport { Context } from \"@openzeppelin/contracts/utils/Context.sol\";\nimport { Strings } from \"@openzeppelin/contracts/utils/Strings.sol\";\nimport { MerkleProof } from \"@openzeppelin/contracts/utils/cryptography/MerkleProof.sol\";\n\nabstract contract ERC721Whitelist is Context {\n    bytes32 public _whitelistMerkleRoot;\n\n    function _setWhitelistMerkleRoot(bytes32 whitelistMerkleRoot_) internal {\n        _whitelistMerkleRoot = whitelistMerkleRoot_;\n    }\n\n    function _leaf(address account, string memory allowance) internal pure returns (bytes32) {\n        return keccak256(abi.encode(account, allowance));\n    }\n\n    function _validateWhitelistMerkleProof(uint256 allowance, bytes32[] calldata proof) internal view returns (bool) {\n        bytes32 leaf = _leaf(_msgSender(), Strings.toString(allowance));\n        return MerkleProof.verify(proof, _whitelistMerkleRoot, leaf);\n    }\n\n    function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) {\n        require(_whitelistMerkleRoot != 0, \"Whitelist merkle root not set\");\n        return MerkleProof.verify(proof, _whitelistMerkleRoot, leaf);\n    }\n\n    function getAllowance(string memory allowance, bytes32[] calldata proof) public view returns (string memory) {\n        require(_verify(_leaf(msg.sender, allowance), proof), \"Invalid Merkle Tree proof supplied.\");\n        return allowance;\n    }\n\n    function _disableWhitelistMerkleRoot() internal {\n        delete _whitelistMerkleRoot;\n    }\n}\n"
      },
      "contracts/MetaDog.sol": {
        "content": "// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { ERC721 } from \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\nimport { IERC721 } from \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\nimport { ERC721Enumerable } from \"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\";\nimport { ERC721Pausable } from \"@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol\";\nimport { ERC721Burnable } from \"@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol\";\nimport { ReentrancyGuard } from \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport { ERC721Royalty } from \"@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol\";\nimport { ERC721Whitelist } from \"./extensions/ERC721Whitelist.sol\";\nimport { ERC721Freezable } from \"./extensions/ERC721Freezable.sol\";\nimport { ERC721MintPausable } from \"./extensions/ERC721MintPausable.sol\";\nimport { ERC721OpenSeaGassLess } from \"./extensions/ERC721OpenSeaGassLess.sol\";\nimport { ERC721Batch } from \"./extensions/ERC721Batch.sol\";\n\ncontract MetaDog is\n    ERC721Enumerable,\n    ERC721Burnable,\n    ERC721Pausable,\n    ERC721Whitelist,\n    ERC721Freezable,\n    ERC721MintPausable,\n    ERC721OpenSeaGassLess,\n    ERC721Batch,\n    ERC721Royalty,\n    Ownable,\n    ReentrancyGuard\n{\n    //////////////////////////////////////////////////////////////////\n    // CONFIGURATION                                                //\n    //////////////////////////////////////////////////////////////////\n\n    uint256 public constant RESERVES = 5; // amount of tokens for the team, or to sell afterwards\n    uint256 public constant PRICE_IN_WEI_WHITELIST = 0.0069 ether; // price per token in the whitelist sale\n    uint256 public constant PRICE_IN_WEI_PUBLIC = 0.042 ether; // price per token in the public sale\n    uint96 public constant ROYALTIES_IN_BASIS_POINTS = 500; // 5% royalties\n    uint256 public constant MAX_PER_TX = 5; // maximum amount of tokens one can mint in one transaction\n    uint256 public constant MAX_SUPPLY = 111; // the total amount of tokens for this NFT\n\n    //////////////////////////////////////////////////////////////////\n    // TOKEN STORAGE                                                //\n    //////////////////////////////////////////////////////////////////\n\n    uint256 private _tokenId;\n    string private _baseTokenURI; // the IPFS url to the folder holding the metadata.\n\n    //////////////////////////////////////////////////////////////////\n    // CROWDSALE STORAGE                                            //\n    //////////////////////////////////////////////////////////////////\n\n    address payable private immutable _wallet; // adress of the wallet which received the funds\n    mapping(address => uint256) private _addressToMinted; // the amount of tokens an address has minted\n    bool private _publicSaleOpen = false; // is the public sale open?\n\n    /// @dev Error thrown when a zero address is provided where it's not allowed\n    error ZeroAddressNotAllowed(address account);\n\n    constructor(\n        string memory name_,\n        string memory symbol_,\n        string memory baseTokenURI_,\n        address proxyRegistryAddress_,\n        address payable wallet_\n    )\n        ERC721(name_, symbol_)\n        ERC721OpenSeaGassLess(proxyRegistryAddress_)\n        Ownable(msg.sender)\n    {\n        _baseTokenURI = baseTokenURI_;\n        if (wallet_ == address(0)) {\n            revert ZeroAddressNotAllowed(wallet_);\n        }\n        _wallet = wallet_;\n        _setDefaultRoyalty(wallet_, ROYALTIES_IN_BASIS_POINTS);\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // CORE FUNCTIONS                                               //\n    //////////////////////////////////////////////////////////////////\n\n    function setBaseURI(string memory baseTokenURI_) public onlyOwner whenURINotFrozen {\n        _baseTokenURI = baseTokenURI_;\n    }\n\n    function _baseURI() internal view override returns (string memory) {\n        return _baseTokenURI;\n    }\n\n    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n        string memory tokenUri = super.tokenURI(tokenId);\n        return bytes(tokenUri).length > 0 ? string(abi.encodePacked(tokenUri, \".json\")) : \"\";\n    }\n\n    function update(address to, uint256 tokenId, address auth) public returns (address) {\n        return _update(to, tokenId, auth);\n    }\n\n    function increaseBalance(address account, uint128 value) public {\n        _increaseBalance(account, value);\n    }\n\n    function _update(\n        address to,\n        uint256 tokenId,\n        address auth\n    )\n        internal\n        virtual\n        override(ERC721Enumerable, ERC721, ERC721Freezable, ERC721Pausable, ERC721MintPausable)\n        returns (address)\n    {\n        // your code here\n        return super._update(to, tokenId, auth);\n    }\n\n    function _increaseBalance(address account, uint128 value) internal override(ERC721, ERC721Enumerable) {\n        super._increaseBalance(account, value);\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // RESERVE TOKENS                                               //\n    //////////////////////////////////////////////////////////////////\n\n    function collectReserves() public onlyOwner {\n        require(_tokenId == 0, \"Reserves already collected\");\n        for (uint256 i = 1; i <= RESERVES; i++) {\n            _mint(_wallet, ++_tokenId);\n        }\n    }\n\n    function gift(address[] calldata recipients_) external onlyOwner {\n        require(_tokenId > 0, \"Reserves not taken yet\");\n        uint256 recipients = recipients_.length;\n        require(_tokenId + recipients <= MAX_SUPPLY, \"Excedes max supply\");\n        for (uint256 i = 0; i < recipients; i++) {\n            _mint(recipients_[i], ++_tokenId);\n        }\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // WHITELIST SALE                                               //\n    //////////////////////////////////////////////////////////////////\n\n    function setWhitelistMerkleRoot(bytes32 whitelistMerkleRoot_) external onlyOwner {\n        _setWhitelistMerkleRoot(whitelistMerkleRoot_);\n    }\n\n    function disableWhitelistMerkleRoot() external onlyOwner {\n        _disableWhitelistMerkleRoot();\n    }\n\n    function whitelistMint(uint256 count, uint256 allowance, bytes32[] calldata proof) public payable nonReentrant {\n        require(_tokenId > 0, \"Reserves not taken yet\");\n        require(_tokenId + count <= MAX_SUPPLY, \"Exceeds max supply\");\n        require(_validateWhitelistMerkleProof(allowance, proof), \"Invalid Merkle Tree proof supplied\");\n        require(_addressToMinted[_msgSender()] + count <= allowance, \"Exceeds whitelist allowance\");\n        require(count * PRICE_IN_WEI_WHITELIST == msg.value, \"Invalid funds provided\");\n        _addressToMinted[_msgSender()] += count;\n        for (uint256 i; i < count; i++) {\n            _mint(_msgSender(), ++_tokenId);\n        }\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // PUBLIC SALE                                                  //\n    //////////////////////////////////////////////////////////////////\n\n    function startPublicSale() external onlyOwner {\n        _disableWhitelistMerkleRoot();\n        _publicSaleOpen = true;\n    }\n\n    function publicMint(uint256 count) public payable nonReentrant {\n        require(_whitelistMerkleRoot == 0, \"Public sale not active\");\n        require(_publicSaleOpen, \"Public sale not active\");\n        require(_tokenId > 0, \"Reserves not taken yet\");\n        require(_tokenId + count <= MAX_SUPPLY, \"Exceeds max supply\");\n        require(count < MAX_PER_TX, \"Exceeds max per transaction\");\n        require(count * PRICE_IN_WEI_PUBLIC == msg.value, \"Invalid funds provided\");\n\n        for (uint256 i; i < count; i++) {\n            _mint(_msgSender(), ++_tokenId);\n        }\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // POST SALE MANAGEMENT                                         //\n    //////////////////////////////////////////////////////////////////\n\n    function withdraw() public onlyOwner {\n        _wallet.transfer(address(this).balance);\n    }\n\n    function wallet() public view returns (address) {\n        return _wallet;\n    }\n\n    function burn(uint256 tokenId) public override(ERC721Burnable) {\n        super.burn(tokenId);\n    }\n\n    function freeze() external onlyOwner {\n        super._freeze();\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // GASLESS LISTING FOR OPENSEA                                  //\n    //////////////////////////////////////////////////////////////////\n\n    function setProxyRegistryAddress(address proxyRegistryAddress_) external onlyOwner {\n        _setProxyRegistryAddress(proxyRegistryAddress_);\n    }\n\n    function isApprovedForAll(\n        address _owner,\n        address operator\n    )\n        public\n        view\n        override(IERC721, ERC721, ERC721OpenSeaGassLess)\n        returns (bool)\n    {\n        return super.isApprovedForAll(_owner, operator);\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // Pausable & MintPausable                                      //\n    //////////////////////////////////////////////////////////////////\n\n    function pause() public onlyOwner {\n        _pause();\n    }\n\n    function unpause() public onlyOwner {\n        _unpause();\n    }\n\n    function pauseMint() public onlyOwner {\n        _pauseMint();\n    }\n\n    function unpauseMint() public onlyOwner {\n        _unpauseMint();\n    }\n\n    //////////////////////////////////////////////////////////////////\n    // ERC165                                                       //\n    //////////////////////////////////////////////////////////////////\n\n    function supportsInterface(bytes4 interfaceId)\n        public\n        view\n        virtual\n        override(ERC721, ERC721Enumerable, ERC721Royalty)\n        returns (bool)\n    {\n        return interfaceId == type(Ownable).interfaceId || interfaceId == type(ERC721Burnable).interfaceId\n            || interfaceId == type(ERC721Enumerable).interfaceId || interfaceId == type(ERC721Whitelist).interfaceId\n            || interfaceId == type(ERC721Freezable).interfaceId || interfaceId == type(ERC721MintPausable).interfaceId\n            || super.supportsInterface(interfaceId);\n    }\n}\n"
      }
    },
    "settings": {
      "viaIR": true,
      "optimizer": {
        "enabled": true,
        "runs": 10000
      },
      "evmVersion": "paris",
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "sources": {
      "@openzeppelin/contracts/access/Ownable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
          "exportedSymbols": {
            "Context": [
              2309
            ],
            "Ownable": [
              147
            ]
          },
          "id": 148,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "102:24:0"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../utils/Context.sol",
              "id": 3,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 148,
              "sourceUnit": 2310,
              "src": "128:45:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2,
                    "name": "Context",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2309,
                    "src": "136:7:0",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5,
                    "name": "Context",
                    "nameLocations": [
                      "692:7:0"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2309,
                    "src": "692:7:0"
                  },
                  "id": 6,
                  "nodeType": "InheritanceSpecifier",
                  "src": "692:7:0"
                }
              ],
              "canonicalName": "Ownable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 4,
                "nodeType": "StructuredDocumentation",
                "src": "175:487:0",
                "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."
              },
              "fullyImplemented": true,
              "id": 147,
              "linearizedBaseContracts": [
                147,
                2309
              ],
              "name": "Ownable",
              "nameLocation": "681:7:0",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 8,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "722:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 147,
                  "src": "706:22:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "706:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 9,
                    "nodeType": "StructuredDocumentation",
                    "src": "735:85:0",
                    "text": " @dev The caller account is not authorized to perform an operation."
                  },
                  "errorSelector": "118cdaa7",
                  "id": 13,
                  "name": "OwnableUnauthorizedAccount",
                  "nameLocation": "831:26:0",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "866:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 13,
                        "src": "858:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "858:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "857:17:0"
                  },
                  "src": "825:50:0"
                },
                {
                  "documentation": {
                    "id": 14,
                    "nodeType": "StructuredDocumentation",
                    "src": "881:82:0",
                    "text": " @dev The owner is not a valid owner account. (eg. `address(0)`)"
                  },
                  "errorSelector": "1e4fbdf7",
                  "id": 18,
                  "name": "OwnableInvalidOwner",
                  "nameLocation": "974:19:0",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 17,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 16,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1002:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 18,
                        "src": "994:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 15,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "994:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "993:15:0"
                  },
                  "src": "968:41:0"
                },
                {
                  "anonymous": false,
                  "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
                  "id": 24,
                  "name": "OwnershipTransferred",
                  "nameLocation": "1021:20:0",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 23,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 20,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "previousOwner",
                        "nameLocation": "1058:13:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 24,
                        "src": "1042:29:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 19,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1042:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 22,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "1089:8:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 24,
                        "src": "1073:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 21,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1073:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1041:57:0"
                  },
                  "src": "1015:84:0"
                },
                {
                  "body": {
                    "id": 49,
                    "nodeType": "Block",
                    "src": "1259:153:0",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 35,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 30,
                            "name": "initialOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27,
                            "src": "1273:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 33,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1297:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 32,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1289:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 31,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1289:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 34,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1289:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1273:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 44,
                        "nodeType": "IfStatement",
                        "src": "1269:95:0",
                        "trueBody": {
                          "id": 43,
                          "nodeType": "Block",
                          "src": "1301:63:0",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 39,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1350:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 38,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1342:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 37,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1342:7:0",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 40,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1342:10:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 36,
                                  "name": "OwnableInvalidOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18,
                                  "src": "1322:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 41,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1322:31:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 42,
                              "nodeType": "RevertStatement",
                              "src": "1315:38:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 46,
                              "name": "initialOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27,
                              "src": "1392:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 45,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 146,
                            "src": "1373:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 47,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1373:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 48,
                        "nodeType": "ExpressionStatement",
                        "src": "1373:32:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 25,
                    "nodeType": "StructuredDocumentation",
                    "src": "1105:115:0",
                    "text": " @dev Initializes the contract setting the address provided by the deployer as the initial owner."
                  },
                  "id": 50,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 28,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 27,
                        "mutability": "mutable",
                        "name": "initialOwner",
                        "nameLocation": "1245:12:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 50,
                        "src": "1237:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 26,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1237:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1236:22:0"
                  },
                  "returnParameters": {
                    "id": 29,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1259:0:0"
                  },
                  "scope": 147,
                  "src": "1225:187:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 57,
                    "nodeType": "Block",
                    "src": "1521:41:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 53,
                            "name": "_checkOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 84,
                            "src": "1531:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 54,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1531:13:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55,
                        "nodeType": "ExpressionStatement",
                        "src": "1531:13:0"
                      },
                      {
                        "id": 56,
                        "nodeType": "PlaceholderStatement",
                        "src": "1554:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 51,
                    "nodeType": "StructuredDocumentation",
                    "src": "1418:77:0",
                    "text": " @dev Throws if called by any account other than the owner."
                  },
                  "id": 58,
                  "name": "onlyOwner",
                  "nameLocation": "1509:9:0",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 52,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1518:2:0"
                  },
                  "src": "1500:62:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 66,
                    "nodeType": "Block",
                    "src": "1693:30:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 64,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8,
                          "src": "1710:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 63,
                        "id": 65,
                        "nodeType": "Return",
                        "src": "1703:13:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 59,
                    "nodeType": "StructuredDocumentation",
                    "src": "1568:65:0",
                    "text": " @dev Returns the address of the current owner."
                  },
                  "functionSelector": "8da5cb5b",
                  "id": 67,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nameLocation": "1647:5:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 60,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1652:2:0"
                  },
                  "returnParameters": {
                    "id": 63,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 62,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 67,
                        "src": "1684:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 61,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1684:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1683:9:0"
                  },
                  "scope": 147,
                  "src": "1638:85:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 83,
                    "nodeType": "Block",
                    "src": "1841:117:0",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 75,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 71,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67,
                              "src": "1855:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 72,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1855:7:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 73,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2291,
                              "src": "1866:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 74,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1866:12:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1855:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 82,
                        "nodeType": "IfStatement",
                        "src": "1851:101:0",
                        "trueBody": {
                          "id": 81,
                          "nodeType": "Block",
                          "src": "1880:72:0",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 77,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2291,
                                      "src": "1928:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 78,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1928:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 76,
                                  "name": "OwnableUnauthorizedAccount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13,
                                  "src": "1901:26:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 79,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1901:40:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 80,
                              "nodeType": "RevertStatement",
                              "src": "1894:47:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "1729:62:0",
                    "text": " @dev Throws if the sender is not the owner."
                  },
                  "id": 84,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkOwner",
                  "nameLocation": "1805:11:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 69,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1816:2:0"
                  },
                  "returnParameters": {
                    "id": 70,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1841:0:0"
                  },
                  "scope": 147,
                  "src": "1796:162:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 97,
                    "nodeType": "Block",
                    "src": "2347:47:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 93,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2384:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 92,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2376:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 91,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2376:7:0",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 94,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2376:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 90,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 146,
                            "src": "2357:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 95,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2357:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 96,
                        "nodeType": "ExpressionStatement",
                        "src": "2357:30:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 85,
                    "nodeType": "StructuredDocumentation",
                    "src": "1964:324:0",
                    "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."
                  },
                  "functionSelector": "715018a6",
                  "id": 98,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 88,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 87,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "2337:9:0"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "2337:9:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2337:9:0"
                    }
                  ],
                  "name": "renounceOwnership",
                  "nameLocation": "2302:17:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 86,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2319:2:0"
                  },
                  "returnParameters": {
                    "id": 89,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2347:0:0"
                  },
                  "scope": 147,
                  "src": "2293:101:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 125,
                    "nodeType": "Block",
                    "src": "2613:145:0",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 106,
                            "name": "newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 101,
                            "src": "2627:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 109,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2647:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 108,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2639:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 107,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2639:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2639:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2627:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 120,
                        "nodeType": "IfStatement",
                        "src": "2623:91:0",
                        "trueBody": {
                          "id": 119,
                          "nodeType": "Block",
                          "src": "2651:63:0",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 115,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2700:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 114,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2692:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 113,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2692:7:0",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 116,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2692:10:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 112,
                                  "name": "OwnableInvalidOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18,
                                  "src": "2672:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 117,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2672:31:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 118,
                              "nodeType": "RevertStatement",
                              "src": "2665:38:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 122,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 101,
                              "src": "2742:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 121,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 146,
                            "src": "2723:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2723:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 124,
                        "nodeType": "ExpressionStatement",
                        "src": "2723:28:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 99,
                    "nodeType": "StructuredDocumentation",
                    "src": "2400:138:0",
                    "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."
                  },
                  "functionSelector": "f2fde38b",
                  "id": 126,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 104,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 103,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "2603:9:0"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "2603:9:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2603:9:0"
                    }
                  ],
                  "name": "transferOwnership",
                  "nameLocation": "2552:17:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 101,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "2578:8:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 126,
                        "src": "2570:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 100,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2570:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2569:18:0"
                  },
                  "returnParameters": {
                    "id": 105,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2613:0:0"
                  },
                  "scope": 147,
                  "src": "2543:215:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 145,
                    "nodeType": "Block",
                    "src": "2975:124:0",
                    "statements": [
                      {
                        "assignments": [
                          133
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 133,
                            "mutability": "mutable",
                            "name": "oldOwner",
                            "nameLocation": "2993:8:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 145,
                            "src": "2985:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 132,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2985:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 135,
                        "initialValue": {
                          "id": 134,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8,
                          "src": "3004:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2985:25:0"
                      },
                      {
                        "expression": {
                          "id": 138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 136,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8,
                            "src": "3020:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 137,
                            "name": "newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 129,
                            "src": "3029:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3020:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 139,
                        "nodeType": "ExpressionStatement",
                        "src": "3020:17:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 141,
                              "name": "oldOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 133,
                              "src": "3073:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 142,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 129,
                              "src": "3083:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 140,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24,
                            "src": "3052:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3052:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 144,
                        "nodeType": "EmitStatement",
                        "src": "3047:45:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 127,
                    "nodeType": "StructuredDocumentation",
                    "src": "2764:143:0",
                    "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."
                  },
                  "id": 146,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferOwnership",
                  "nameLocation": "2921:18:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 130,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 129,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "2948:8:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 146,
                        "src": "2940:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 128,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2940:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2939:18:0"
                  },
                  "returnParameters": {
                    "id": 131,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2975:0:0"
                  },
                  "scope": 147,
                  "src": "2912:187:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 148,
              "src": "663:2438:0",
              "usedErrors": [
                13,
                18
              ],
              "usedEvents": [
                24
              ]
            }
          ],
          "src": "102:3000:0"
        },
        "id": 0
      },
      "@openzeppelin/contracts/interfaces/IERC2981.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/IERC2981.sol",
          "exportedSymbols": {
            "IERC165": [
              5089
            ],
            "IERC2981": [
              167
            ]
          },
          "id": 168,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 149,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "107:24:1"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "../utils/introspection/IERC165.sol",
              "id": 151,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 168,
              "sourceUnit": 5090,
              "src": "133:59:1",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 150,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5089,
                    "src": "141:7:1",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 153,
                    "name": "IERC165",
                    "nameLocations": [
                      "476:7:1"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5089,
                    "src": "476:7:1"
                  },
                  "id": 154,
                  "nodeType": "InheritanceSpecifier",
                  "src": "476:7:1"
                }
              ],
              "canonicalName": "IERC2981",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 152,
                "nodeType": "StructuredDocumentation",
                "src": "194:259:1",
                "text": " @dev Interface for the NFT Royalty Standard.\n A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal\n support for royalty payments across all NFT marketplaces and ecosystem participants."
              },
              "fullyImplemented": false,
              "id": 167,
              "linearizedBaseContracts": [
                167,
                5089
              ],
              "name": "IERC2981",
              "nameLocation": "464:8:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 155,
                    "nodeType": "StructuredDocumentation",
                    "src": "490:473:1",
                    "text": " @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of\n exchange. The royalty amount is denominated and should be paid in that same unit of exchange.\n NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the\n royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers."
                  },
                  "functionSelector": "2a55205a",
                  "id": 166,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "royaltyInfo",
                  "nameLocation": "977:11:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 157,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1006:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 166,
                        "src": "998:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 156,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "998:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 159,
                        "mutability": "mutable",
                        "name": "salePrice",
                        "nameLocation": "1031:9:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 166,
                        "src": "1023:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 158,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1023:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "988:58:1"
                  },
                  "returnParameters": {
                    "id": 165,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 162,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "1078:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 166,
                        "src": "1070:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 161,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1070:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 164,
                        "mutability": "mutable",
                        "name": "royaltyAmount",
                        "nameLocation": "1096:13:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 166,
                        "src": "1088:21:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 163,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1088:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1069:41:1"
                  },
                  "scope": 167,
                  "src": "968:143:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 168,
              "src": "454:659:1",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "107:1007:1"
        },
        "id": 1
      },
      "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
          "exportedSymbols": {
            "IERC1155Errors": [
              304
            ],
            "IERC20Errors": [
              209
            ],
            "IERC721Errors": [
              257
            ]
          },
          "id": 305,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 169,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "112:24:2"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC20Errors",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 170,
                "nodeType": "StructuredDocumentation",
                "src": "138:141:2",
                "text": " @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."
              },
              "fullyImplemented": true,
              "id": 209,
              "linearizedBaseContracts": [
                209
              ],
              "name": "IERC20Errors",
              "nameLocation": "290:12:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 171,
                    "nodeType": "StructuredDocumentation",
                    "src": "309:309:2",
                    "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."
                  },
                  "errorSelector": "e450d38c",
                  "id": 179,
                  "name": "ERC20InsufficientBalance",
                  "nameLocation": "629:24:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 178,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 173,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "662:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 179,
                        "src": "654:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 172,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "654:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 175,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "678:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 179,
                        "src": "670:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 174,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "670:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 177,
                        "mutability": "mutable",
                        "name": "needed",
                        "nameLocation": "695:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 179,
                        "src": "687:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 176,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "687:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "653:49:2"
                  },
                  "src": "623:80:2"
                },
                {
                  "documentation": {
                    "id": 180,
                    "nodeType": "StructuredDocumentation",
                    "src": "709:152:2",
                    "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."
                  },
                  "errorSelector": "96c6fd1e",
                  "id": 184,
                  "name": "ERC20InvalidSender",
                  "nameLocation": "872:18:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 183,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 182,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "899:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 184,
                        "src": "891:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 181,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "891:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "890:16:2"
                  },
                  "src": "866:41:2"
                },
                {
                  "documentation": {
                    "id": 185,
                    "nodeType": "StructuredDocumentation",
                    "src": "913:159:2",
                    "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."
                  },
                  "errorSelector": "ec442f05",
                  "id": 189,
                  "name": "ERC20InvalidReceiver",
                  "nameLocation": "1083:20:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 187,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "1112:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 189,
                        "src": "1104:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 186,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1104:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1103:18:2"
                  },
                  "src": "1077:45:2"
                },
                {
                  "documentation": {
                    "id": 190,
                    "nodeType": "StructuredDocumentation",
                    "src": "1128:345:2",
                    "text": " @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."
                  },
                  "errorSelector": "fb8f41b2",
                  "id": 198,
                  "name": "ERC20InsufficientAllowance",
                  "nameLocation": "1484:26:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 197,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 192,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "1519:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "1511:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 191,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1511:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 194,
                        "mutability": "mutable",
                        "name": "allowance",
                        "nameLocation": "1536:9:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "1528:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 193,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1528:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 196,
                        "mutability": "mutable",
                        "name": "needed",
                        "nameLocation": "1555:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "1547:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 195,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1547:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1510:52:2"
                  },
                  "src": "1478:85:2"
                },
                {
                  "documentation": {
                    "id": 199,
                    "nodeType": "StructuredDocumentation",
                    "src": "1569:174:2",
                    "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."
                  },
                  "errorSelector": "e602df05",
                  "id": 203,
                  "name": "ERC20InvalidApprover",
                  "nameLocation": "1754:20:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 201,
                        "mutability": "mutable",
                        "name": "approver",
                        "nameLocation": "1783:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 203,
                        "src": "1775:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 200,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1775:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1774:18:2"
                  },
                  "src": "1748:45:2"
                },
                {
                  "documentation": {
                    "id": 204,
                    "nodeType": "StructuredDocumentation",
                    "src": "1799:195:2",
                    "text": " @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."
                  },
                  "errorSelector": "94280d62",
                  "id": 208,
                  "name": "ERC20InvalidSpender",
                  "nameLocation": "2005:19:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 206,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "2033:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 208,
                        "src": "2025:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 205,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2025:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2024:17:2"
                  },
                  "src": "1999:43:2"
                }
              ],
              "scope": 305,
              "src": "280:1764:2",
              "usedErrors": [
                179,
                184,
                189,
                198,
                203,
                208
              ],
              "usedEvents": []
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC721Errors",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 210,
                "nodeType": "StructuredDocumentation",
                "src": "2046:143:2",
                "text": " @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."
              },
              "fullyImplemented": true,
              "id": 257,
              "linearizedBaseContracts": [
                257
              ],
              "name": "IERC721Errors",
              "nameLocation": "2200:13:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 211,
                    "nodeType": "StructuredDocumentation",
                    "src": "2220:219:2",
                    "text": " @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."
                  },
                  "errorSelector": "89c62b64",
                  "id": 215,
                  "name": "ERC721InvalidOwner",
                  "nameLocation": "2450:18:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 214,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 213,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "2477:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 215,
                        "src": "2469:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 212,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2469:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2468:15:2"
                  },
                  "src": "2444:40:2"
                },
                {
                  "documentation": {
                    "id": 216,
                    "nodeType": "StructuredDocumentation",
                    "src": "2490:132:2",
                    "text": " @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."
                  },
                  "errorSelector": "7e273289",
                  "id": 220,
                  "name": "ERC721NonexistentToken",
                  "nameLocation": "2633:22:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 219,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 218,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2664:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 220,
                        "src": "2656:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2656:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2655:17:2"
                  },
                  "src": "2627:46:2"
                },
                {
                  "documentation": {
                    "id": 221,
                    "nodeType": "StructuredDocumentation",
                    "src": "2679:289:2",
                    "text": " @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."
                  },
                  "errorSelector": "64283d7b",
                  "id": 229,
                  "name": "ERC721IncorrectOwner",
                  "nameLocation": "2979:20:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 228,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 223,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "3008:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 229,
                        "src": "3000:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 222,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3000:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 225,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3024:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 229,
                        "src": "3016:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 224,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3016:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 227,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "3041:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 229,
                        "src": "3033:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 226,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3033:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2999:48:2"
                  },
                  "src": "2973:75:2"
                },
                {
                  "documentation": {
                    "id": 230,
                    "nodeType": "StructuredDocumentation",
                    "src": "3054:152:2",
                    "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."
                  },
                  "errorSelector": "73c6ac6e",
                  "id": 234,
                  "name": "ERC721InvalidSender",
                  "nameLocation": "3217:19:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 233,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 232,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "3245:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 234,
                        "src": "3237:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 231,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3237:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3236:16:2"
                  },
                  "src": "3211:42:2"
                },
                {
                  "documentation": {
                    "id": 235,
                    "nodeType": "StructuredDocumentation",
                    "src": "3259:159:2",
                    "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."
                  },
                  "errorSelector": "64a0ae92",
                  "id": 239,
                  "name": "ERC721InvalidReceiver",
                  "nameLocation": "3429:21:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 238,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 237,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "3459:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 239,
                        "src": "3451:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 236,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3451:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3450:18:2"
                  },
                  "src": "3423:46:2"
                },
                {
                  "documentation": {
                    "id": 240,
                    "nodeType": "StructuredDocumentation",
                    "src": "3475:247:2",
                    "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."
                  },
                  "errorSelector": "177e802f",
                  "id": 246,
                  "name": "ERC721InsufficientApproval",
                  "nameLocation": "3733:26:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 245,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 242,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3768:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 246,
                        "src": "3760:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 241,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3760:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 244,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3786:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 246,
                        "src": "3778:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 243,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3778:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3759:35:2"
                  },
                  "src": "3727:68:2"
                },
                {
                  "documentation": {
                    "id": 247,
                    "nodeType": "StructuredDocumentation",
                    "src": "3801:174:2",
                    "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."
                  },
                  "errorSelector": "a9fbf51f",
                  "id": 251,
                  "name": "ERC721InvalidApprover",
                  "nameLocation": "3986:21:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 250,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 249,
                        "mutability": "mutable",
                        "name": "approver",
                        "nameLocation": "4016:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 251,
                        "src": "4008:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4008:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4007:18:2"
                  },
                  "src": "3980:46:2"
                },
                {
                  "documentation": {
                    "id": 252,
                    "nodeType": "StructuredDocumentation",
                    "src": "4032:197:2",
                    "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."
                  },
                  "errorSelector": "5b08ba18",
                  "id": 256,
                  "name": "ERC721InvalidOperator",
                  "nameLocation": "4240:21:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 255,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 254,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4270:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 256,
                        "src": "4262:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 253,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4262:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4261:18:2"
                  },
                  "src": "4234:46:2"
                }
              ],
              "scope": 305,
              "src": "2190:2092:2",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256
              ],
              "usedEvents": []
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC1155Errors",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 258,
                "nodeType": "StructuredDocumentation",
                "src": "4284:145:2",
                "text": " @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."
              },
              "fullyImplemented": true,
              "id": 304,
              "linearizedBaseContracts": [
                304
              ],
              "name": "IERC1155Errors",
              "nameLocation": "4440:14:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 259,
                    "nodeType": "StructuredDocumentation",
                    "src": "4461:361:2",
                    "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."
                  },
                  "errorSelector": "03dee4c5",
                  "id": 269,
                  "name": "ERC1155InsufficientBalance",
                  "nameLocation": "4833:26:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 268,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 261,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "4868:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 269,
                        "src": "4860:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 260,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4860:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 263,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "4884:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 269,
                        "src": "4876:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 262,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4876:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 265,
                        "mutability": "mutable",
                        "name": "needed",
                        "nameLocation": "4901:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 269,
                        "src": "4893:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 264,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4893:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 267,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4917:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 269,
                        "src": "4909:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 266,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4909:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4859:66:2"
                  },
                  "src": "4827:99:2"
                },
                {
                  "documentation": {
                    "id": 270,
                    "nodeType": "StructuredDocumentation",
                    "src": "4932:152:2",
                    "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."
                  },
                  "errorSelector": "01a83514",
                  "id": 274,
                  "name": "ERC1155InvalidSender",
                  "nameLocation": "5095:20:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 273,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 272,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "5124:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 274,
                        "src": "5116:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 271,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5116:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5115:16:2"
                  },
                  "src": "5089:43:2"
                },
                {
                  "documentation": {
                    "id": 275,
                    "nodeType": "StructuredDocumentation",
                    "src": "5138:159:2",
                    "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."
                  },
                  "errorSelector": "57f447ce",
                  "id": 279,
                  "name": "ERC1155InvalidReceiver",
                  "nameLocation": "5308:22:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 278,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 277,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "5339:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 279,
                        "src": "5331:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 276,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5331:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5330:18:2"
                  },
                  "src": "5302:47:2"
                },
                {
                  "documentation": {
                    "id": 280,
                    "nodeType": "StructuredDocumentation",
                    "src": "5355:256:2",
                    "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."
                  },
                  "errorSelector": "e237d922",
                  "id": 286,
                  "name": "ERC1155MissingApprovalForAll",
                  "nameLocation": "5622:28:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 285,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 282,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "5659:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 286,
                        "src": "5651:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 281,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5651:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 284,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "5677:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 286,
                        "src": "5669:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 283,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5669:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5650:33:2"
                  },
                  "src": "5616:68:2"
                },
                {
                  "documentation": {
                    "id": 287,
                    "nodeType": "StructuredDocumentation",
                    "src": "5690:174:2",
                    "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."
                  },
                  "errorSelector": "3e31884e",
                  "id": 291,
                  "name": "ERC1155InvalidApprover",
                  "nameLocation": "5875:22:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 290,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 289,
                        "mutability": "mutable",
                        "name": "approver",
                        "nameLocation": "5906:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 291,
                        "src": "5898:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 288,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5898:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5897:18:2"
                  },
                  "src": "5869:47:2"
                },
                {
                  "documentation": {
                    "id": 292,
                    "nodeType": "StructuredDocumentation",
                    "src": "5922:197:2",
                    "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."
                  },
                  "errorSelector": "ced3e100",
                  "id": 296,
                  "name": "ERC1155InvalidOperator",
                  "nameLocation": "6130:22:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 294,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "6161:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 296,
                        "src": "6153:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 293,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6153:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6152:18:2"
                  },
                  "src": "6124:47:2"
                },
                {
                  "documentation": {
                    "id": 297,
                    "nodeType": "StructuredDocumentation",
                    "src": "6177:280:2",
                    "text": " @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"
                  },
                  "errorSelector": "5b059991",
                  "id": 303,
                  "name": "ERC1155InvalidArrayLength",
                  "nameLocation": "6468:25:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 299,
                        "mutability": "mutable",
                        "name": "idsLength",
                        "nameLocation": "6502:9:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 303,
                        "src": "6494:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 298,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6494:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 301,
                        "mutability": "mutable",
                        "name": "valuesLength",
                        "nameLocation": "6521:12:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 303,
                        "src": "6513:20:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 300,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6513:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6493:41:2"
                  },
                  "src": "6462:73:2"
                }
              ],
              "scope": 305,
              "src": "4430:2107:2",
              "usedErrors": [
                269,
                274,
                279,
                286,
                291,
                296,
                303
              ],
              "usedEvents": []
            }
          ],
          "src": "112:6426:2"
        },
        "id": 2
      },
      "@openzeppelin/contracts/token/ERC721/ERC721.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
          "exportedSymbols": {
            "Context": [
              2309
            ],
            "ERC165": [
              5077
            ],
            "ERC721": [
              1261
            ],
            "ERC721Utils": [
              2012
            ],
            "IERC165": [
              5089
            ],
            "IERC721": [
              1378
            ],
            "IERC721Errors": [
              257
            ],
            "IERC721Metadata": [
              1935
            ],
            "Strings": [
              3940
            ]
          },
          "id": 1262,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 306,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "107:24:3"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "./IERC721.sol",
              "id": 308,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1262,
              "sourceUnit": 1379,
              "src": "133:38:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 307,
                    "name": "IERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1378,
                    "src": "141:7:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
              "file": "./extensions/IERC721Metadata.sol",
              "id": 310,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1262,
              "sourceUnit": 1936,
              "src": "172:65:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 309,
                    "name": "IERC721Metadata",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1935,
                    "src": "180:15:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol",
              "file": "./utils/ERC721Utils.sol",
              "id": 312,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1262,
              "sourceUnit": 2013,
              "src": "238:52:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 311,
                    "name": "ERC721Utils",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2012,
                    "src": "246:11:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../../utils/Context.sol",
              "id": 314,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1262,
              "sourceUnit": 2310,
              "src": "291:48:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 313,
                    "name": "Context",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2309,
                    "src": "299:7:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
              "file": "../../utils/Strings.sol",
              "id": 316,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1262,
              "sourceUnit": 3941,
              "src": "340:48:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 315,
                    "name": "Strings",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3940,
                    "src": "348:7:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
              "file": "../../utils/introspection/ERC165.sol",
              "id": 319,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1262,
              "sourceUnit": 5078,
              "src": "389:69:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 317,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5089,
                    "src": "397:7:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                },
                {
                  "foreign": {
                    "id": 318,
                    "name": "ERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5077,
                    "src": "406:6:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
              "file": "../../interfaces/draft-IERC6093.sol",
              "id": 321,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1262,
              "sourceUnit": 305,
              "src": "459:66:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 320,
                    "name": "IERC721Errors",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 257,
                    "src": "467:13:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 323,
                    "name": "Context",
                    "nameLocations": [
                      "803:7:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2309,
                    "src": "803:7:3"
                  },
                  "id": 324,
                  "nodeType": "InheritanceSpecifier",
                  "src": "803:7:3"
                },
                {
                  "baseName": {
                    "id": 325,
                    "name": "ERC165",
                    "nameLocations": [
                      "812:6:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5077,
                    "src": "812:6:3"
                  },
                  "id": 326,
                  "nodeType": "InheritanceSpecifier",
                  "src": "812:6:3"
                },
                {
                  "baseName": {
                    "id": 327,
                    "name": "IERC721",
                    "nameLocations": [
                      "820:7:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1378,
                    "src": "820:7:3"
                  },
                  "id": 328,
                  "nodeType": "InheritanceSpecifier",
                  "src": "820:7:3"
                },
                {
                  "baseName": {
                    "id": 329,
                    "name": "IERC721Metadata",
                    "nameLocations": [
                      "829:15:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1935,
                    "src": "829:15:3"
                  },
                  "id": 330,
                  "nodeType": "InheritanceSpecifier",
                  "src": "829:15:3"
                },
                {
                  "baseName": {
                    "id": 331,
                    "name": "IERC721Errors",
                    "nameLocations": [
                      "846:13:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 257,
                    "src": "846:13:3"
                  },
                  "id": 332,
                  "nodeType": "InheritanceSpecifier",
                  "src": "846:13:3"
                }
              ],
              "canonicalName": "ERC721",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 322,
                "nodeType": "StructuredDocumentation",
                "src": "527:247:3",
                "text": " @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including\n the Metadata extension, but not including the Enumerable extension, which is available separately as\n {ERC721Enumerable}."
              },
              "fullyImplemented": true,
              "id": 1261,
              "linearizedBaseContracts": [
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721",
              "nameLocation": "793:6:3",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 335,
                  "libraryName": {
                    "id": 333,
                    "name": "Strings",
                    "nameLocations": [
                      "872:7:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3940,
                    "src": "872:7:3"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "866:26:3",
                  "typeName": {
                    "id": 334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "884:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 337,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "931:5:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "916:20:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 336,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "916:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 339,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "978:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "963:22:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 338,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "963:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 343,
                  "mutability": "mutable",
                  "name": "_owners",
                  "nameLocation": "1036:7:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "992:51:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 342,
                    "keyName": "tokenId",
                    "keyNameLocation": "1008:7:3",
                    "keyType": {
                      "id": 340,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1000:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "992:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 341,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1019:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 347,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nameLocation": "1092:9:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "1050:51:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 346,
                    "keyName": "owner",
                    "keyNameLocation": "1066:5:3",
                    "keyType": {
                      "id": 344,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1058:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1050:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 345,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1075:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 351,
                  "mutability": "mutable",
                  "name": "_tokenApprovals",
                  "nameLocation": "1152:15:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "1108:59:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 350,
                    "keyName": "tokenId",
                    "keyNameLocation": "1124:7:3",
                    "keyType": {
                      "id": 348,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1116:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1108:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 349,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1135:7:3",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 357,
                  "mutability": "mutable",
                  "name": "_operatorApprovals",
                  "nameLocation": "1242:18:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "1174:86:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                    "typeString": "mapping(address => mapping(address => bool))"
                  },
                  "typeName": {
                    "id": 356,
                    "keyName": "owner",
                    "keyNameLocation": "1190:5:3",
                    "keyType": {
                      "id": 352,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1182:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1174:59:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                      "typeString": "mapping(address => mapping(address => bool))"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 355,
                      "keyName": "operator",
                      "keyNameLocation": "1215:8:3",
                      "keyType": {
                        "id": 353,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1207:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1199:33:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      },
                      "valueName": "",
                      "valueNameLocation": "-1:-1:-1",
                      "valueType": {
                        "id": 354,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1227:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 373,
                    "nodeType": "Block",
                    "src": "1436:57:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 365,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 337,
                            "src": "1446:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 366,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 360,
                            "src": "1454:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1446:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 368,
                        "nodeType": "ExpressionStatement",
                        "src": "1446:13:3"
                      },
                      {
                        "expression": {
                          "id": 371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 369,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 339,
                            "src": "1469:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 370,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 362,
                            "src": "1479:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1469:17:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 372,
                        "nodeType": "ExpressionStatement",
                        "src": "1469:17:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 358,
                    "nodeType": "StructuredDocumentation",
                    "src": "1267:108:3",
                    "text": " @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."
                  },
                  "id": 374,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 360,
                        "mutability": "mutable",
                        "name": "name_",
                        "nameLocation": "1406:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1392:19:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 359,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1392:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 362,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nameLocation": "1427:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1413:21:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 361,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1413:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1391:44:3"
                  },
                  "returnParameters": {
                    "id": 364,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1436:0:3"
                  },
                  "scope": 1261,
                  "src": "1380:113:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    5076,
                    5088
                  ],
                  "body": {
                    "id": 404,
                    "nodeType": "Block",
                    "src": "1668:192:3",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 397,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 390,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 385,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 377,
                                "src": "1697:11:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 387,
                                      "name": "IERC721",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1378,
                                      "src": "1717:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721_$1378_$",
                                        "typeString": "type(contract IERC721)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721_$1378_$",
                                        "typeString": "type(contract IERC721)"
                                      }
                                    ],
                                    "id": 386,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "1712:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 388,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1712:13:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721_$1378",
                                    "typeString": "type(contract IERC721)"
                                  }
                                },
                                "id": 389,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "1726:11:3",
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "1712:25:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "1697:40:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 391,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 377,
                                "src": "1753:11:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 393,
                                      "name": "IERC721Metadata",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1935,
                                      "src": "1773:15:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1935_$",
                                        "typeString": "type(contract IERC721Metadata)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$1935_$",
                                        "typeString": "type(contract IERC721Metadata)"
                                      }
                                    ],
                                    "id": 392,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "1768:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 394,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1768:21:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721Metadata_$1935",
                                    "typeString": "type(contract IERC721Metadata)"
                                  }
                                },
                                "id": 395,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "1790:11:3",
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "1768:33:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "1753:48:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "1697:104:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 400,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 377,
                                "src": "1841:11:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 398,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "1817:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_ERC721_$1261_$",
                                  "typeString": "type(contract super ERC721)"
                                }
                              },
                              "id": 399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1823:17:3",
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5076,
                              "src": "1817:23:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 401,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1817:36:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1697:156:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 384,
                        "id": 403,
                        "nodeType": "Return",
                        "src": "1678:175:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 375,
                    "nodeType": "StructuredDocumentation",
                    "src": "1499:56:3",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 405,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "1569:17:3",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 381,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 379,
                        "name": "ERC165",
                        "nameLocations": [
                          "1636:6:3"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5077,
                        "src": "1636:6:3"
                      },
                      {
                        "id": 380,
                        "name": "IERC165",
                        "nameLocations": [
                          "1644:7:3"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5089,
                        "src": "1644:7:3"
                      }
                    ],
                    "src": "1627:25:3"
                  },
                  "parameters": {
                    "id": 378,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 377,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "1594:11:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 405,
                        "src": "1587:18:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 376,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1587:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1586:20:3"
                  },
                  "returnParameters": {
                    "id": 384,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 383,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 405,
                        "src": "1662:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 382,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1662:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1661:6:3"
                  },
                  "scope": 1261,
                  "src": "1560:300:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1303
                  ],
                  "body": {
                    "id": 432,
                    "nodeType": "Block",
                    "src": "1991:136:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 413,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 408,
                            "src": "2005:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 416,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2022:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2014:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 414,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2014:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2014:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2005:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 427,
                        "nodeType": "IfStatement",
                        "src": "2001:87:3",
                        "trueBody": {
                          "id": 426,
                          "nodeType": "Block",
                          "src": "2026:62:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 422,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2074:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2066:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 420,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2066:7:3",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 423,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2066:10:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 419,
                                  "name": "ERC721InvalidOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 215,
                                  "src": "2047:18:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2047:30:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 425,
                              "nodeType": "RevertStatement",
                              "src": "2040:37:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 428,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 347,
                            "src": "2104:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 430,
                          "indexExpression": {
                            "id": 429,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 408,
                            "src": "2114:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2104:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 412,
                        "id": 431,
                        "nodeType": "Return",
                        "src": "2097:23:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 406,
                    "nodeType": "StructuredDocumentation",
                    "src": "1866:48:3",
                    "text": " @dev See {IERC721-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 433,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "1928:9:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 409,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 408,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1946:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 433,
                        "src": "1938:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 407,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1938:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1937:15:3"
                  },
                  "returnParameters": {
                    "id": 412,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 411,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 433,
                        "src": "1982:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 410,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1982:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1981:9:3"
                  },
                  "scope": 1261,
                  "src": "1919:208:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1311
                  ],
                  "body": {
                    "id": 445,
                    "nodeType": "Block",
                    "src": "2256:46:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 442,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 436,
                              "src": "2287:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 441,
                            "name": "_requireOwned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1260,
                            "src": "2273:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2273:22:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 440,
                        "id": 444,
                        "nodeType": "Return",
                        "src": "2266:29:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 434,
                    "nodeType": "StructuredDocumentation",
                    "src": "2133:46:3",
                    "text": " @dev See {IERC721-ownerOf}."
                  },
                  "functionSelector": "6352211e",
                  "id": 446,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nameLocation": "2193:7:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 437,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 436,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2209:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "2201:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 435,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2201:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2200:17:3"
                  },
                  "returnParameters": {
                    "id": 440,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 439,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "2247:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 438,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2247:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2246:9:3"
                  },
                  "scope": 1261,
                  "src": "2184:118:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1920
                  ],
                  "body": {
                    "id": 454,
                    "nodeType": "Block",
                    "src": "2424:29:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 452,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 337,
                          "src": "2441:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 451,
                        "id": 453,
                        "nodeType": "Return",
                        "src": "2434:12:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 447,
                    "nodeType": "StructuredDocumentation",
                    "src": "2308:51:3",
                    "text": " @dev See {IERC721Metadata-name}."
                  },
                  "functionSelector": "06fdde03",
                  "id": 455,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "2373:4:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 448,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2377:2:3"
                  },
                  "returnParameters": {
                    "id": 451,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 450,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "2409:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 449,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2409:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2408:15:3"
                  },
                  "scope": 1261,
                  "src": "2364:89:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1926
                  ],
                  "body": {
                    "id": 463,
                    "nodeType": "Block",
                    "src": "2579:31:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 461,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 339,
                          "src": "2596:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 460,
                        "id": 462,
                        "nodeType": "Return",
                        "src": "2589:14:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 456,
                    "nodeType": "StructuredDocumentation",
                    "src": "2459:53:3",
                    "text": " @dev See {IERC721Metadata-symbol}."
                  },
                  "functionSelector": "95d89b41",
                  "id": 464,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "2526:6:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 457,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2532:2:3"
                  },
                  "returnParameters": {
                    "id": 460,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 459,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 464,
                        "src": "2564:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 458,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2564:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2563:15:3"
                  },
                  "scope": 1261,
                  "src": "2517:93:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1934
                  ],
                  "body": {
                    "id": 499,
                    "nodeType": "Block",
                    "src": "2755:176:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 473,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 467,
                              "src": "2779:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 472,
                            "name": "_requireOwned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1260,
                            "src": "2765:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2765:22:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 475,
                        "nodeType": "ExpressionStatement",
                        "src": "2765:22:3"
                      },
                      {
                        "assignments": [
                          477
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 477,
                            "mutability": "mutable",
                            "name": "baseURI",
                            "nameLocation": "2812:7:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 499,
                            "src": "2798:21:3",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 476,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2798:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 480,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 478,
                            "name": "_baseURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 509,
                            "src": "2822:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () view returns (string memory)"
                            }
                          },
                          "id": 479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2822:10:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2798:34:3"
                      },
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 487,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 483,
                                    "name": "baseURI",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 477,
                                    "src": "2855:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 482,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2849:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 481,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2849:5:3",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 484,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2849:14:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 485,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2864:6:3",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "2849:21:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 486,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2873:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2849:25:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "hexValue": "",
                            "id": 496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2922:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          },
                          "id": 497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2849:75:3",
                          "trueExpression": {
                            "arguments": [
                              {
                                "id": 491,
                                "name": "baseURI",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 477,
                                "src": "2891:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 492,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 467,
                                    "src": "2900:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 493,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2908:8:3",
                                  "memberName": "toString",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2652,
                                  "src": "2900:16:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$attached_to$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (string memory)"
                                  }
                                },
                                "id": 494,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2900:18:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "expression": {
                                "id": 489,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2877:6:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                  "typeString": "type(string storage pointer)"
                                },
                                "typeName": {
                                  "id": 488,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2877:6:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2884:6:3",
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "src": "2877:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                                "typeString": "function () pure returns (string memory)"
                              }
                            },
                            "id": 495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2877:42:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 471,
                        "id": 498,
                        "nodeType": "Return",
                        "src": "2842:82:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 465,
                    "nodeType": "StructuredDocumentation",
                    "src": "2616:55:3",
                    "text": " @dev See {IERC721Metadata-tokenURI}."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 500,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "2685:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 467,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2702:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 500,
                        "src": "2694:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 466,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2694:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2693:17:3"
                  },
                  "returnParameters": {
                    "id": 471,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 470,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 500,
                        "src": "2740:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 469,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2740:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2739:15:3"
                  },
                  "scope": 1261,
                  "src": "2676:255:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 508,
                    "nodeType": "Block",
                    "src": "3239:26:3",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "",
                          "id": 506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3256:2:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        },
                        "functionReturnParameters": 505,
                        "id": 507,
                        "nodeType": "Return",
                        "src": "3249:9:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 501,
                    "nodeType": "StructuredDocumentation",
                    "src": "2937:231:3",
                    "text": " @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n by default, can be overridden in child contracts."
                  },
                  "id": 509,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_baseURI",
                  "nameLocation": "3182:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 502,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3190:2:3"
                  },
                  "returnParameters": {
                    "id": 505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 504,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 509,
                        "src": "3224:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 503,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3224:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3223:15:3"
                  },
                  "scope": 1261,
                  "src": "3173:92:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1351
                  ],
                  "body": {
                    "id": 524,
                    "nodeType": "Block",
                    "src": "3383:52:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 518,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 512,
                              "src": "3402:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 519,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 514,
                              "src": "3406:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 520,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "3415:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3415:12:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 517,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1128,
                              1194
                            ],
                            "referencedDeclaration": 1128,
                            "src": "3393:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3393:35:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 523,
                        "nodeType": "ExpressionStatement",
                        "src": "3393:35:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 510,
                    "nodeType": "StructuredDocumentation",
                    "src": "3271:46:3",
                    "text": " @dev See {IERC721-approve}."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 525,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "3331:7:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 515,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 512,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3347:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 525,
                        "src": "3339:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 511,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3339:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 514,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3359:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 525,
                        "src": "3351:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 513,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3351:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3338:29:3"
                  },
                  "returnParameters": {
                    "id": 516,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3383:0:3"
                  },
                  "scope": 1261,
                  "src": "3322:113:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1367
                  ],
                  "body": {
                    "id": 541,
                    "nodeType": "Block",
                    "src": "3572:78:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 534,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 528,
                              "src": "3596:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 533,
                            "name": "_requireOwned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1260,
                            "src": "3582:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3582:22:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 536,
                        "nodeType": "ExpressionStatement",
                        "src": "3582:22:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 538,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 528,
                              "src": "3635:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 537,
                            "name": "_getApproved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 695,
                            "src": "3622:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3622:21:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 532,
                        "id": 540,
                        "nodeType": "Return",
                        "src": "3615:28:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 526,
                    "nodeType": "StructuredDocumentation",
                    "src": "3441:50:3",
                    "text": " @dev See {IERC721-getApproved}."
                  },
                  "functionSelector": "081812fc",
                  "id": 542,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApproved",
                  "nameLocation": "3505:11:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 529,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 528,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3525:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 542,
                        "src": "3517:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 527,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3517:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3516:17:3"
                  },
                  "returnParameters": {
                    "id": 532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 531,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 542,
                        "src": "3563:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 530,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3563:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3562:9:3"
                  },
                  "scope": 1261,
                  "src": "3496:154:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1359
                  ],
                  "body": {
                    "id": 557,
                    "nodeType": "Block",
                    "src": "3792:69:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 551,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "3821:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 552,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3821:12:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 553,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 545,
                              "src": "3835:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 554,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 547,
                              "src": "3845:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 550,
                            "name": "_setApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1231,
                            "src": "3802:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3802:52:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 556,
                        "nodeType": "ExpressionStatement",
                        "src": "3802:52:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 543,
                    "nodeType": "StructuredDocumentation",
                    "src": "3656:56:3",
                    "text": " @dev See {IERC721-setApprovalForAll}."
                  },
                  "functionSelector": "a22cb465",
                  "id": 558,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "3726:17:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 548,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 545,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3752:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 558,
                        "src": "3744:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 544,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3744:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 547,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "3767:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 558,
                        "src": "3762:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 546,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3762:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3743:33:3"
                  },
                  "returnParameters": {
                    "id": 549,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3792:0:3"
                  },
                  "scope": 1261,
                  "src": "3717:144:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1377
                  ],
                  "body": {
                    "id": 574,
                    "nodeType": "Block",
                    "src": "4021:59:3",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 568,
                              "name": "_operatorApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 357,
                              "src": "4038:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(address => bool))"
                              }
                            },
                            "id": 570,
                            "indexExpression": {
                              "id": 569,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 561,
                              "src": "4057:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4038:25:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 572,
                          "indexExpression": {
                            "id": 571,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 563,
                            "src": "4064:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4038:35:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 567,
                        "id": 573,
                        "nodeType": "Return",
                        "src": "4031:42:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 559,
                    "nodeType": "StructuredDocumentation",
                    "src": "3867:55:3",
                    "text": " @dev See {IERC721-isApprovedForAll}."
                  },
                  "functionSelector": "e985e9c5",
                  "id": 575,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "3936:16:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 564,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 561,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "3961:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 575,
                        "src": "3953:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 560,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3953:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 563,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3976:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 575,
                        "src": "3968:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 562,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3968:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3952:33:3"
                  },
                  "returnParameters": {
                    "id": 567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 566,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 575,
                        "src": "4015:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 565,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4015:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4014:6:3"
                  },
                  "scope": 1261,
                  "src": "3927:153:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1343
                  ],
                  "body": {
                    "id": 620,
                    "nodeType": "Block",
                    "src": "4222:498:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 585,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 580,
                            "src": "4236:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 588,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4250:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 587,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4242:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 586,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4242:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 589,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4242:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4236:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 599,
                        "nodeType": "IfStatement",
                        "src": "4232:87:3",
                        "trueBody": {
                          "id": 598,
                          "nodeType": "Block",
                          "src": "4254:65:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 594,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4305:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 593,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "4297:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 592,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4297:7:3",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 595,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4297:10:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 591,
                                  "name": "ERC721InvalidReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 239,
                                  "src": "4275:21:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4275:33:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 597,
                              "nodeType": "RevertStatement",
                              "src": "4268:40:3"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          601
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 601,
                            "mutability": "mutable",
                            "name": "previousOwner",
                            "nameLocation": "4545:13:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 620,
                            "src": "4537:21:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 600,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4537:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 608,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 603,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 580,
                              "src": "4569:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 604,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 582,
                              "src": "4573:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 605,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "4582:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 606,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4582:12:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 602,
                            "name": "_update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 874,
                            "src": "4561:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4561:34:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4537:58:3"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 611,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 609,
                            "name": "previousOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 601,
                            "src": "4609:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 610,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 578,
                            "src": "4626:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4609:21:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 619,
                        "nodeType": "IfStatement",
                        "src": "4605:109:3",
                        "trueBody": {
                          "id": 618,
                          "nodeType": "Block",
                          "src": "4632:82:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 613,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 578,
                                    "src": "4674:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 614,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 582,
                                    "src": "4680:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 615,
                                    "name": "previousOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 601,
                                    "src": "4689:13:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 612,
                                  "name": "ERC721IncorrectOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 229,
                                  "src": "4653:20:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_address_$returns$__$",
                                    "typeString": "function (address,uint256,address) pure"
                                  }
                                },
                                "id": 616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4653:50:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 617,
                              "nodeType": "RevertStatement",
                              "src": "4646:57:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 576,
                    "nodeType": "StructuredDocumentation",
                    "src": "4086:51:3",
                    "text": " @dev See {IERC721-transferFrom}."
                  },
                  "functionSelector": "23b872dd",
                  "id": 621,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "4151:12:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 578,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4172:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 621,
                        "src": "4164:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 577,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4164:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 580,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4186:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 621,
                        "src": "4178:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 579,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4178:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 582,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4198:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 621,
                        "src": "4190:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 581,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4190:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4163:43:3"
                  },
                  "returnParameters": {
                    "id": 584,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4222:0:3"
                  },
                  "scope": 1261,
                  "src": "4142:578:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1333
                  ],
                  "body": {
                    "id": 638,
                    "nodeType": "Block",
                    "src": "4862:56:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 632,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 624,
                              "src": "4889:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 633,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 626,
                              "src": "4895:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 634,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 628,
                              "src": "4899:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4908:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 631,
                            "name": "safeTransferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              639,
                              669
                            ],
                            "referencedDeclaration": 669,
                            "src": "4872:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 636,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4872:39:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 637,
                        "nodeType": "ExpressionStatement",
                        "src": "4872:39:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 622,
                    "nodeType": "StructuredDocumentation",
                    "src": "4726:55:3",
                    "text": " @dev See {IERC721-safeTransferFrom}."
                  },
                  "functionSelector": "42842e0e",
                  "id": 639,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "4795:16:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 629,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 624,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4820:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 639,
                        "src": "4812:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 623,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4812:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 626,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4834:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 639,
                        "src": "4826:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 625,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4826:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 628,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4846:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 639,
                        "src": "4838:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 627,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4838:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4811:43:3"
                  },
                  "returnParameters": {
                    "id": 630,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4862:0:3"
                  },
                  "scope": 1261,
                  "src": "4786:132:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1323
                  ],
                  "body": {
                    "id": 668,
                    "nodeType": "Block",
                    "src": "5087:130:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 652,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 642,
                              "src": "5110:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 653,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 644,
                              "src": "5116:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 654,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 646,
                              "src": "5120:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 651,
                            "name": "transferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 621,
                            "src": "5097:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5097:31:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 656,
                        "nodeType": "ExpressionStatement",
                        "src": "5097:31:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 660,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "5172:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5172:12:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 662,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 642,
                              "src": "5186:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 663,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 644,
                              "src": "5192:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 664,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 646,
                              "src": "5196:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 665,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 648,
                              "src": "5205:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 657,
                              "name": "ERC721Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2012,
                              "src": "5138:11:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721Utils_$2012_$",
                                "typeString": "type(library ERC721Utils)"
                              }
                            },
                            "id": 659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5150:21:3",
                            "memberName": "checkOnERC721Received",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2011,
                            "src": "5138:33:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5138:72:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 667,
                        "nodeType": "ExpressionStatement",
                        "src": "5138:72:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 640,
                    "nodeType": "StructuredDocumentation",
                    "src": "4924:55:3",
                    "text": " @dev See {IERC721-safeTransferFrom}."
                  },
                  "functionSelector": "b88d4fde",
                  "id": 669,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "4993:16:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 649,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 642,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "5018:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 669,
                        "src": "5010:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 641,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5010:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 644,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "5032:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 669,
                        "src": "5024:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 643,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5024:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 646,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5044:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 669,
                        "src": "5036:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 645,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5036:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 648,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5066:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 669,
                        "src": "5053:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 647,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5053:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5009:62:3"
                  },
                  "returnParameters": {
                    "id": 650,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5087:0:3"
                  },
                  "scope": 1261,
                  "src": "4984:233:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 681,
                    "nodeType": "Block",
                    "src": "5807:40:3",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 677,
                            "name": "_owners",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 343,
                            "src": "5824:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 679,
                          "indexExpression": {
                            "id": 678,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 672,
                            "src": "5832:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5824:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 676,
                        "id": 680,
                        "nodeType": "Return",
                        "src": "5817:23:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 670,
                    "nodeType": "StructuredDocumentation",
                    "src": "5223:504:3",
                    "text": " @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\n IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the\n core ERC-721 logic MUST be matched with the use of {_increaseBalance} to keep balances\n consistent with ownership. The invariant to preserve is that for any address `a` the value returned by\n `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`."
                  },
                  "id": 682,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_ownerOf",
                  "nameLocation": "5741:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 673,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 672,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5758:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 682,
                        "src": "5750:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 671,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5750:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5749:17:3"
                  },
                  "returnParameters": {
                    "id": 676,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 675,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 682,
                        "src": "5798:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5798:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5797:9:3"
                  },
                  "scope": 1261,
                  "src": "5732:115:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 694,
                    "nodeType": "Block",
                    "src": "6042:48:3",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 690,
                            "name": "_tokenApprovals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 351,
                            "src": "6059:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 692,
                          "indexExpression": {
                            "id": 691,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 685,
                            "src": "6075:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6059:24:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 689,
                        "id": 693,
                        "nodeType": "Return",
                        "src": "6052:31:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 683,
                    "nodeType": "StructuredDocumentation",
                    "src": "5853:105:3",
                    "text": " @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted."
                  },
                  "id": 695,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getApproved",
                  "nameLocation": "5972:12:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 686,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 685,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5993:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 695,
                        "src": "5985:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 684,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5985:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5984:17:3"
                  },
                  "returnParameters": {
                    "id": 689,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 688,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 695,
                        "src": "6033:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 687,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6033:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6032:9:3"
                  },
                  "scope": 1261,
                  "src": "5963:127:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 730,
                    "nodeType": "Block",
                    "src": "6510:163:3",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 707,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 700,
                              "src": "6539:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 710,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6558:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6550:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 708,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6550:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6550:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "6539:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 726,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 715,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 713,
                                      "name": "owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 698,
                                      "src": "6577:5:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "id": 714,
                                      "name": "spender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 700,
                                      "src": "6586:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "6577:16:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "id": 717,
                                        "name": "owner",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 698,
                                        "src": "6614:5:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 718,
                                        "name": "spender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 700,
                                        "src": "6621:7:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 716,
                                      "name": "isApprovedForAll",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 575,
                                      "src": "6597:16:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                        "typeString": "function (address,address) view returns (bool)"
                                      }
                                    },
                                    "id": 719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6597:32:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "6577:52:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 725,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 722,
                                        "name": "tokenId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 702,
                                        "src": "6646:7:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 721,
                                      "name": "_getApproved",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 695,
                                      "src": "6633:12:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                        "typeString": "function (uint256) view returns (address)"
                                      }
                                    },
                                    "id": 723,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6633:21:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "id": 724,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 700,
                                    "src": "6658:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "6633:32:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "6577:88:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 727,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "6576:90:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6539:127:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 706,
                        "id": 729,
                        "nodeType": "Return",
                        "src": "6520:146:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 696,
                    "nodeType": "StructuredDocumentation",
                    "src": "6096:300:3",
                    "text": " @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in\n particular (ignoring whether it is owned by `owner`).\n WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n assumption."
                  },
                  "id": 731,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isAuthorized",
                  "nameLocation": "6410:13:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 703,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 698,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "6432:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 731,
                        "src": "6424:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 697,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6424:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 700,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "6447:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 731,
                        "src": "6439:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 699,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6439:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 702,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "6464:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 731,
                        "src": "6456:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 701,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6456:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6423:49:3"
                  },
                  "returnParameters": {
                    "id": 706,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 705,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 731,
                        "src": "6504:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 704,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6504:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6503:6:3"
                  },
                  "scope": 1261,
                  "src": "6401:272:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 767,
                    "nodeType": "Block",
                    "src": "7202:271:3",
                    "statements": [
                      {
                        "condition": {
                          "id": 746,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7216:39:3",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 742,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 734,
                                "src": "7231:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 743,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 736,
                                "src": "7238:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 744,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 738,
                                "src": "7247:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 741,
                              "name": "_isAuthorized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 731,
                              "src": "7217:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,address,uint256) view returns (bool)"
                              }
                            },
                            "id": 745,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7217:38:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 766,
                        "nodeType": "IfStatement",
                        "src": "7212:255:3",
                        "trueBody": {
                          "id": 765,
                          "nodeType": "Block",
                          "src": "7257:210:3",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 752,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 747,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 734,
                                  "src": "7275:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 750,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7292:1:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 749,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7284:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 748,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7284:7:3",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 751,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7284:10:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "7275:19:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 763,
                                "nodeType": "Block",
                                "src": "7373:84:3",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [
                                        {
                                          "id": 759,
                                          "name": "spender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 736,
                                          "src": "7425:7:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 760,
                                          "name": "tokenId",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 738,
                                          "src": "7434:7:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 758,
                                        "name": "ERC721InsufficientApproval",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 246,
                                        "src": "7398:26:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$__$",
                                          "typeString": "function (address,uint256) pure"
                                        }
                                      },
                                      "id": 761,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7398:44:3",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 762,
                                    "nodeType": "RevertStatement",
                                    "src": "7391:51:3"
                                  }
                                ]
                              },
                              "id": 764,
                              "nodeType": "IfStatement",
                              "src": "7271:186:3",
                              "trueBody": {
                                "id": 757,
                                "nodeType": "Block",
                                "src": "7296:71:3",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [
                                        {
                                          "id": 754,
                                          "name": "tokenId",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 738,
                                          "src": "7344:7:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 753,
                                        "name": "ERC721NonexistentToken",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 220,
                                        "src": "7321:22:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                          "typeString": "function (uint256) pure"
                                        }
                                      },
                                      "id": 755,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7321:31:3",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 756,
                                    "nodeType": "RevertStatement",
                                    "src": "7314:38:3"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 732,
                    "nodeType": "StructuredDocumentation",
                    "src": "6679:421:3",
                    "text": " @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.\n Reverts if:\n - `spender` does not have approval from `owner` for `tokenId`.\n - `spender` does not have approval to manage all of `owner`'s assets.\n WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n assumption."
                  },
                  "id": 768,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkAuthorized",
                  "nameLocation": "7114:16:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 739,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 734,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "7139:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 768,
                        "src": "7131:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 733,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7131:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 736,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "7154:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 768,
                        "src": "7146:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 735,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7146:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 738,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "7171:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 768,
                        "src": "7163:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 737,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7163:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7130:49:3"
                  },
                  "returnParameters": {
                    "id": 740,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7202:0:3"
                  },
                  "scope": 1261,
                  "src": "7105:368:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 783,
                    "nodeType": "Block",
                    "src": "8190:78:3",
                    "statements": [
                      {
                        "id": 782,
                        "nodeType": "UncheckedBlock",
                        "src": "8200:62:3",
                        "statements": [
                          {
                            "expression": {
                              "id": 780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 776,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 347,
                                  "src": "8224:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 778,
                                "indexExpression": {
                                  "id": 777,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 771,
                                  "src": "8234:7:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "8224:18:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "id": 779,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 773,
                                "src": "8246:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "8224:27:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 781,
                            "nodeType": "ExpressionStatement",
                            "src": "8224:27:3"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 769,
                    "nodeType": "StructuredDocumentation",
                    "src": "7479:631:3",
                    "text": " @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that\n a uint256 would ever overflow from increments when these increments are bounded to uint128 values.\n WARNING: Increasing an account's balance using this function tends to be paired with an override of the\n {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership\n remain consistent with one another."
                  },
                  "id": 784,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_increaseBalance",
                  "nameLocation": "8124:16:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 771,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "8149:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 784,
                        "src": "8141:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 770,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8141:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 773,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8166:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 784,
                        "src": "8158:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 772,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "8158:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8140:32:3"
                  },
                  "returnParameters": {
                    "id": 775,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8190:0:3"
                  },
                  "scope": 1261,
                  "src": "8115:153:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 873,
                    "nodeType": "Block",
                    "src": "8956:700:3",
                    "statements": [
                      {
                        "assignments": [
                          797
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 797,
                            "mutability": "mutable",
                            "name": "from",
                            "nameLocation": "8974:4:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 873,
                            "src": "8966:12:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 796,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8966:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 801,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 799,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 789,
                              "src": "8990:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 798,
                            "name": "_ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 682,
                            "src": "8981:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 800,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8981:17:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8966:32:3"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 802,
                            "name": "auth",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 791,
                            "src": "9058:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 805,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9074:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9066:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 803,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9066:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 806,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9066:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9058:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 815,
                        "nodeType": "IfStatement",
                        "src": "9054:86:3",
                        "trueBody": {
                          "id": 814,
                          "nodeType": "Block",
                          "src": "9078:62:3",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 809,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 797,
                                    "src": "9109:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 810,
                                    "name": "auth",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 791,
                                    "src": "9115:4:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 811,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 789,
                                    "src": "9121:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 808,
                                  "name": "_checkAuthorized",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 768,
                                  "src": "9092:16:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256) view"
                                  }
                                },
                                "id": 812,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9092:37:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 813,
                              "nodeType": "ExpressionStatement",
                              "src": "9092:37:3"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 816,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 797,
                            "src": "9184:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 819,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9200:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 818,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9192:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 817,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9192:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9192:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9184:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 843,
                        "nodeType": "IfStatement",
                        "src": "9180:256:3",
                        "trueBody": {
                          "id": 842,
                          "nodeType": "Block",
                          "src": "9204:232:3",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 825,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9317:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 824,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "9309:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 823,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9309:7:3",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 826,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "9309:10:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 827,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 789,
                                    "src": "9321:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 830,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9338:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 829,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "9330:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 828,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9330:7:3",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 831,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "9330:10:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "hexValue": "66616c7365",
                                    "id": 832,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9342:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 822,
                                  "name": "_approve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    1128,
                                    1194
                                  ],
                                  "referencedDeclaration": 1194,
                                  "src": "9300:8:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bool_$returns$__$",
                                    "typeString": "function (address,uint256,address,bool)"
                                  }
                                },
                                "id": 833,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9300:48:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 834,
                              "nodeType": "ExpressionStatement",
                              "src": "9300:48:3"
                            },
                            {
                              "id": 841,
                              "nodeType": "UncheckedBlock",
                              "src": "9363:63:3",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 839,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "id": 835,
                                        "name": "_balances",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 347,
                                        "src": "9391:9:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 837,
                                      "indexExpression": {
                                        "id": 836,
                                        "name": "from",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 797,
                                        "src": "9401:4:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "9391:15:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "-=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 838,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9410:1:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "9391:20:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 840,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9391:20:3"
                                }
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 844,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "9450:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 847,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9464:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9456:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 845,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9456:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 848,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9456:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9450:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 858,
                        "nodeType": "IfStatement",
                        "src": "9446:107:3",
                        "trueBody": {
                          "id": 857,
                          "nodeType": "Block",
                          "src": "9468:85:3",
                          "statements": [
                            {
                              "id": 856,
                              "nodeType": "UncheckedBlock",
                              "src": "9482:61:3",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 854,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "id": 850,
                                        "name": "_balances",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 347,
                                        "src": "9510:9:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 852,
                                      "indexExpression": {
                                        "id": 851,
                                        "name": "to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 787,
                                        "src": "9520:2:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "9510:13:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 853,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9527:1:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "9510:18:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 855,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9510:18:3"
                                }
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 859,
                              "name": "_owners",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 343,
                              "src": "9563:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 861,
                            "indexExpression": {
                              "id": 860,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 789,
                              "src": "9571:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9563:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 862,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "9582:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9563:21:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 864,
                        "nodeType": "ExpressionStatement",
                        "src": "9563:21:3"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 866,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 797,
                              "src": "9609:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 867,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 787,
                              "src": "9615:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 868,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 789,
                              "src": "9619:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 865,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1277,
                            "src": "9600:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 869,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9600:27:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 870,
                        "nodeType": "EmitStatement",
                        "src": "9595:32:3"
                      },
                      {
                        "expression": {
                          "id": 871,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 797,
                          "src": "9645:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 795,
                        "id": 872,
                        "nodeType": "Return",
                        "src": "9638:11:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 785,
                    "nodeType": "StructuredDocumentation",
                    "src": "8274:582:3",
                    "text": " @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner\n (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.\n The `auth` argument is optional. If the value passed is non 0, then this function will check that\n `auth` is either the owner of the token, or approved to operate on the token (by the owner).\n Emits a {Transfer} event.\n NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}."
                  },
                  "id": 874,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "8870:7:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 792,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 787,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8886:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 874,
                        "src": "8878:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 786,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8878:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 789,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8898:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 874,
                        "src": "8890:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 788,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8890:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 791,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "8915:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 874,
                        "src": "8907:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 790,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8907:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8877:43:3"
                  },
                  "returnParameters": {
                    "id": 795,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 794,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 874,
                        "src": "8947:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 793,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8947:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8946:9:3"
                  },
                  "scope": 1261,
                  "src": "8861:795:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 923,
                    "nodeType": "Block",
                    "src": "10031:274:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 882,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 877,
                            "src": "10045:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10059:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 884,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10051:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 883,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "10051:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10051:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "10045:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 896,
                        "nodeType": "IfStatement",
                        "src": "10041:87:3",
                        "trueBody": {
                          "id": 895,
                          "nodeType": "Block",
                          "src": "10063:65:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 891,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10114:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 890,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "10106:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 889,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10106:7:3",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 892,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10106:10:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 888,
                                  "name": "ERC721InvalidReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 239,
                                  "src": "10084:21:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 893,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10084:33:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 894,
                              "nodeType": "RevertStatement",
                              "src": "10077:40:3"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          898
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 898,
                            "mutability": "mutable",
                            "name": "previousOwner",
                            "nameLocation": "10145:13:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 923,
                            "src": "10137:21:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 897,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10137:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 907,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 900,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 877,
                              "src": "10169:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 901,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 879,
                              "src": "10173:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 904,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10190:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 903,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10182:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 902,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10182:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 905,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10182:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 899,
                            "name": "_update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 874,
                            "src": "10161:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 906,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10161:32:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10137:56:3"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 908,
                            "name": "previousOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 898,
                            "src": "10207:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 911,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10232:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10224:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 909,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "10224:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 912,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10224:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "10207:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 922,
                        "nodeType": "IfStatement",
                        "src": "10203:96:3",
                        "trueBody": {
                          "id": 921,
                          "nodeType": "Block",
                          "src": "10236:63:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 917,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10285:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 916,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "10277:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 915,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10277:7:3",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 918,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10277:10:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 914,
                                  "name": "ERC721InvalidSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 234,
                                  "src": "10257:19:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 919,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10257:31:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 920,
                              "nodeType": "RevertStatement",
                              "src": "10250:38:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 875,
                    "nodeType": "StructuredDocumentation",
                    "src": "9662:311:3",
                    "text": " @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."
                  },
                  "id": 924,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "9987:5:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 880,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 877,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10001:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 924,
                        "src": "9993:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 876,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9993:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 879,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "10013:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 924,
                        "src": "10005:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 878,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10005:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9992:29:3"
                  },
                  "returnParameters": {
                    "id": 881,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10031:0:3"
                  },
                  "scope": 1261,
                  "src": "9978:327:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 938,
                    "nodeType": "Block",
                    "src": "10713:43:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 933,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 927,
                              "src": "10733:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 934,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 929,
                              "src": "10737:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10746:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 932,
                            "name": "_safeMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              939,
                              969
                            ],
                            "referencedDeclaration": 969,
                            "src": "10723:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256,bytes memory)"
                            }
                          },
                          "id": 936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10723:26:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 937,
                        "nodeType": "ExpressionStatement",
                        "src": "10723:26:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 925,
                    "nodeType": "StructuredDocumentation",
                    "src": "10311:340:3",
                    "text": " @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.\n Requirements:\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "id": 939,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "10665:9:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 927,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10683:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 939,
                        "src": "10675:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 926,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10675:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 929,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "10695:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 939,
                        "src": "10687:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 928,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10687:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10674:29:3"
                  },
                  "returnParameters": {
                    "id": 931,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10713:0:3"
                  },
                  "scope": 1261,
                  "src": "10656:100:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 968,
                    "nodeType": "Block",
                    "src": "11061:123:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 950,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 942,
                              "src": "11077:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 951,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 944,
                              "src": "11081:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 949,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 924,
                            "src": "11071:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11071:18:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 953,
                        "nodeType": "ExpressionStatement",
                        "src": "11071:18:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 957,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "11133:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 958,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11133:12:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 961,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11155:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 960,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11147:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 959,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11147:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11147:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 963,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 942,
                              "src": "11159:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 964,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 944,
                              "src": "11163:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 965,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 946,
                              "src": "11172:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 954,
                              "name": "ERC721Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2012,
                              "src": "11099:11:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721Utils_$2012_$",
                                "typeString": "type(library ERC721Utils)"
                              }
                            },
                            "id": 956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11111:21:3",
                            "memberName": "checkOnERC721Received",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2011,
                            "src": "11099:33:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11099:78:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 967,
                        "nodeType": "ExpressionStatement",
                        "src": "11099:78:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 940,
                    "nodeType": "StructuredDocumentation",
                    "src": "10762:210:3",
                    "text": " @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
                  },
                  "id": 969,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "10986:9:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 947,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 942,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11004:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 969,
                        "src": "10996:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 941,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10996:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 944,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "11016:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 969,
                        "src": "11008:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 943,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11008:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 946,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "11038:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 969,
                        "src": "11025:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 945,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "11025:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10995:48:3"
                  },
                  "returnParameters": {
                    "id": 948,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11061:0:3"
                  },
                  "scope": 1261,
                  "src": "10977:207:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1001,
                    "nodeType": "Block",
                    "src": "11551:186:3",
                    "statements": [
                      {
                        "assignments": [
                          976
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 976,
                            "mutability": "mutable",
                            "name": "previousOwner",
                            "nameLocation": "11569:13:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 1001,
                            "src": "11561:21:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 975,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11561:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 988,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 980,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11601:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11593:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 978,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11593:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11593:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 982,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 972,
                              "src": "11605:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 985,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11622:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 984,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11614:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 983,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11614:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 986,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11614:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 977,
                            "name": "_update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 874,
                            "src": "11585:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11585:40:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11561:64:3"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 989,
                            "name": "previousOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 976,
                            "src": "11639:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 992,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11664:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "11656:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 990,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "11656:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 993,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11656:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "11639:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1000,
                        "nodeType": "IfStatement",
                        "src": "11635:96:3",
                        "trueBody": {
                          "id": 999,
                          "nodeType": "Block",
                          "src": "11668:63:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 996,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 972,
                                    "src": "11712:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 995,
                                  "name": "ERC721NonexistentToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 220,
                                  "src": "11689:22:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 997,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11689:31:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 998,
                              "nodeType": "RevertStatement",
                              "src": "11682:38:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 970,
                    "nodeType": "StructuredDocumentation",
                    "src": "11190:315:3",
                    "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n This is an internal function that does not check if the sender is authorized to operate on the token.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
                  },
                  "id": 1002,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "11519:5:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 973,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 972,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "11533:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1002,
                        "src": "11525:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 971,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11525:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11524:17:3"
                  },
                  "returnParameters": {
                    "id": 974,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11551:0:3"
                  },
                  "scope": 1261,
                  "src": "11510:227:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1061,
                    "nodeType": "Block",
                    "src": "12132:389:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1012,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1007,
                            "src": "12146:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1015,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12160:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1014,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12152:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1013,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "12152:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12152:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12146:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1026,
                        "nodeType": "IfStatement",
                        "src": "12142:87:3",
                        "trueBody": {
                          "id": 1025,
                          "nodeType": "Block",
                          "src": "12164:65:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1021,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "12215:1:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1020,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "12207:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1019,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12207:7:3",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1022,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12207:10:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1018,
                                  "name": "ERC721InvalidReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 239,
                                  "src": "12185:21:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 1023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12185:33:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1024,
                              "nodeType": "RevertStatement",
                              "src": "12178:40:3"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          1028
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1028,
                            "mutability": "mutable",
                            "name": "previousOwner",
                            "nameLocation": "12246:13:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 1061,
                            "src": "12238:21:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1027,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12238:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1037,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1030,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1007,
                              "src": "12270:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1031,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1009,
                              "src": "12274:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1034,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12291:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12283:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1032,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12283:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1035,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12283:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1029,
                            "name": "_update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 874,
                            "src": "12262:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 1036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12262:32:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12238:56:3"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1038,
                            "name": "previousOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1028,
                            "src": "12308:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12333:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1040,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12325:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1039,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "12325:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1042,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12325:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12308:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1051,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1049,
                              "name": "previousOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1028,
                              "src": "12410:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 1050,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1005,
                              "src": "12427:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "12410:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 1059,
                          "nodeType": "IfStatement",
                          "src": "12406:109:3",
                          "trueBody": {
                            "id": 1058,
                            "nodeType": "Block",
                            "src": "12433:82:3",
                            "statements": [
                              {
                                "errorCall": {
                                  "arguments": [
                                    {
                                      "id": 1053,
                                      "name": "from",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1005,
                                      "src": "12475:4:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 1054,
                                      "name": "tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1009,
                                      "src": "12481:7:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 1055,
                                      "name": "previousOwner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1028,
                                      "src": "12490:13:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 1052,
                                    "name": "ERC721IncorrectOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 229,
                                    "src": "12454:20:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_address_$returns$__$",
                                      "typeString": "function (address,uint256,address) pure"
                                    }
                                  },
                                  "id": 1056,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12454:50:3",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 1057,
                                "nodeType": "RevertStatement",
                                "src": "12447:57:3"
                              }
                            ]
                          }
                        },
                        "id": 1060,
                        "nodeType": "IfStatement",
                        "src": "12304:211:3",
                        "trueBody": {
                          "id": 1048,
                          "nodeType": "Block",
                          "src": "12337:63:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 1045,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1009,
                                    "src": "12381:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1044,
                                  "name": "ERC721NonexistentToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 220,
                                  "src": "12358:22:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 1046,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12358:31:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1047,
                              "nodeType": "RevertStatement",
                              "src": "12351:38:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1003,
                    "nodeType": "StructuredDocumentation",
                    "src": "11743:313:3",
                    "text": " @dev Transfers `tokenId` from `from` to `to`.\n  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
                  },
                  "id": 1062,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nameLocation": "12070:9:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1005,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "12088:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1062,
                        "src": "12080:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1004,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12080:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1007,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "12102:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1062,
                        "src": "12094:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1006,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12094:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1009,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "12114:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1062,
                        "src": "12106:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12106:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12079:43:3"
                  },
                  "returnParameters": {
                    "id": 1011,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12132:0:3"
                  },
                  "scope": 1261,
                  "src": "12061:460:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1079,
                    "nodeType": "Block",
                    "src": "13530:53:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1073,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1065,
                              "src": "13554:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1074,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1067,
                              "src": "13560:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1075,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1069,
                              "src": "13564:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 1076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13573:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 1072,
                            "name": "_safeTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1080,
                              1110
                            ],
                            "referencedDeclaration": 1110,
                            "src": "13540:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 1077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13540:36:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1078,
                        "nodeType": "ExpressionStatement",
                        "src": "13540:36:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1063,
                    "nodeType": "StructuredDocumentation",
                    "src": "12527:923:3",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients\n are aware of the ERC-721 standard to prevent tokens from being forever locked.\n `data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is like {safeTransferFrom} in the sense that it invokes\n {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `tokenId` token must exist and be owned by `from`.\n - `to` cannot be the zero address.\n - `from` cannot be the zero address.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "id": 1080,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeTransfer",
                  "nameLocation": "13464:13:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1070,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1065,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "13486:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1080,
                        "src": "13478:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1064,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13478:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1067,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "13500:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1080,
                        "src": "13492:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1066,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13492:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1069,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "13512:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1080,
                        "src": "13504:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1068,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13504:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13477:43:3"
                  },
                  "returnParameters": {
                    "id": 1071,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13530:0:3"
                  },
                  "scope": 1261,
                  "src": "13455:128:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1109,
                    "nodeType": "Block",
                    "src": "13922:127:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1093,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1083,
                              "src": "13942:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1094,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1085,
                              "src": "13948:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1095,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1087,
                              "src": "13952:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1092,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1062,
                            "src": "13932:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13932:28:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1097,
                        "nodeType": "ExpressionStatement",
                        "src": "13932:28:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1101,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "14004:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 1102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14004:12:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1103,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1083,
                              "src": "14018:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1104,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1085,
                              "src": "14024:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1105,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1087,
                              "src": "14028:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1106,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1089,
                              "src": "14037:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 1098,
                              "name": "ERC721Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2012,
                              "src": "13970:11:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721Utils_$2012_$",
                                "typeString": "type(library ERC721Utils)"
                              }
                            },
                            "id": 1100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13982:21:3",
                            "memberName": "checkOnERC721Received",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2011,
                            "src": "13970:33:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 1107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13970:72:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1108,
                        "nodeType": "ExpressionStatement",
                        "src": "13970:72:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1081,
                    "nodeType": "StructuredDocumentation",
                    "src": "13589:226:3",
                    "text": " @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
                  },
                  "id": 1110,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeTransfer",
                  "nameLocation": "13829:13:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1090,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1083,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "13851:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1110,
                        "src": "13843:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1082,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13843:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1085,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "13865:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1110,
                        "src": "13857:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1084,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13857:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1087,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "13877:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1110,
                        "src": "13869:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1086,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13869:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1089,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "13899:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1110,
                        "src": "13886:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1088,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "13886:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13842:62:3"
                  },
                  "returnParameters": {
                    "id": 1091,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13922:0:3"
                  },
                  "scope": 1261,
                  "src": "13820:229:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1127,
                    "nodeType": "Block",
                    "src": "14562:50:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1121,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1113,
                              "src": "14581:2:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1122,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1115,
                              "src": "14585:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1123,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1117,
                              "src": "14594:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 1124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14600:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1120,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1128,
                              1194
                            ],
                            "referencedDeclaration": 1194,
                            "src": "14572:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,uint256,address,bool)"
                            }
                          },
                          "id": 1125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14572:33:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1126,
                        "nodeType": "ExpressionStatement",
                        "src": "14572:33:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1111,
                    "nodeType": "StructuredDocumentation",
                    "src": "14055:432:3",
                    "text": " @dev Approve `to` to operate on `tokenId`\n The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is\n either the owner of the token, or approved to operate on all tokens held by this owner.\n Emits an {Approval} event.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."
                  },
                  "id": 1128,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nameLocation": "14501:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1113,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "14518:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1128,
                        "src": "14510:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1112,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14510:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1115,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "14530:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1128,
                        "src": "14522:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1114,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14522:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1117,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "14547:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1128,
                        "src": "14539:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1116,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14539:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14509:43:3"
                  },
                  "returnParameters": {
                    "id": 1119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14562:0:3"
                  },
                  "scope": 1261,
                  "src": "14492:120:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1193,
                    "nodeType": "Block",
                    "src": "14888:568:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1140,
                            "name": "emitEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1137,
                            "src": "14954:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1146,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1141,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1135,
                              "src": "14967:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1144,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14983:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1143,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14975:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1142,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14975:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1145,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14975:10:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "14967:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "14954:31:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1186,
                        "nodeType": "IfStatement",
                        "src": "14950:460:3",
                        "trueBody": {
                          "id": 1185,
                          "nodeType": "Block",
                          "src": "14987:423:3",
                          "statements": [
                            {
                              "assignments": [
                                1149
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1149,
                                  "mutability": "mutable",
                                  "name": "owner",
                                  "nameLocation": "15009:5:3",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1185,
                                  "src": "15001:13:3",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1148,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15001:7:3",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1153,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1151,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1133,
                                    "src": "15031:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1150,
                                  "name": "_requireOwned",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1260,
                                  "src": "15017:13:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                    "typeString": "function (uint256) view returns (address)"
                                  }
                                },
                                "id": 1152,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15017:22:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15001:38:3"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 1169,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 1163,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 1159,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1154,
                                      "name": "auth",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1135,
                                      "src": "15167:4:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 1157,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "15183:1:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          }
                                        ],
                                        "id": 1156,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15175:7:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 1155,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "15175:7:3",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 1158,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15175:10:3",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "15167:18:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 1162,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1160,
                                      "name": "owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1149,
                                      "src": "15189:5:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "id": 1161,
                                      "name": "auth",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1135,
                                      "src": "15198:4:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "15189:13:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "15167:35:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "id": 1168,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "!",
                                  "prefix": true,
                                  "src": "15206:30:3",
                                  "subExpression": {
                                    "arguments": [
                                      {
                                        "id": 1165,
                                        "name": "owner",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1149,
                                        "src": "15224:5:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 1166,
                                        "name": "auth",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1135,
                                        "src": "15231:4:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1164,
                                      "name": "isApprovedForAll",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 575,
                                      "src": "15207:16:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                        "typeString": "function (address,address) view returns (bool)"
                                      }
                                    },
                                    "id": 1167,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "15207:29:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "15167:69:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1175,
                              "nodeType": "IfStatement",
                              "src": "15163:142:3",
                              "trueBody": {
                                "id": 1174,
                                "nodeType": "Block",
                                "src": "15238:67:3",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [
                                        {
                                          "id": 1171,
                                          "name": "auth",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1135,
                                          "src": "15285:4:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 1170,
                                        "name": "ERC721InvalidApprover",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 251,
                                        "src": "15263:21:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                          "typeString": "function (address) pure"
                                        }
                                      },
                                      "id": 1172,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15263:27:3",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1173,
                                    "nodeType": "RevertStatement",
                                    "src": "15256:34:3"
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "id": 1176,
                                "name": "emitEvent",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1137,
                                "src": "15323:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1184,
                              "nodeType": "IfStatement",
                              "src": "15319:81:3",
                              "trueBody": {
                                "id": 1183,
                                "nodeType": "Block",
                                "src": "15334:66:3",
                                "statements": [
                                  {
                                    "eventCall": {
                                      "arguments": [
                                        {
                                          "id": 1178,
                                          "name": "owner",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1149,
                                          "src": "15366:5:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1179,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1131,
                                          "src": "15373:2:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1180,
                                          "name": "tokenId",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1133,
                                          "src": "15377:7:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 1177,
                                        "name": "Approval",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1286,
                                        "src": "15357:8:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                          "typeString": "function (address,address,uint256)"
                                        }
                                      },
                                      "id": 1181,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15357:28:3",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1182,
                                    "nodeType": "EmitStatement",
                                    "src": "15352:33:3"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1187,
                              "name": "_tokenApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 351,
                              "src": "15420:15:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 1189,
                            "indexExpression": {
                              "id": 1188,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1133,
                              "src": "15436:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "15420:24:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1190,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1131,
                            "src": "15447:2:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "15420:29:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1192,
                        "nodeType": "ExpressionStatement",
                        "src": "15420:29:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1129,
                    "nodeType": "StructuredDocumentation",
                    "src": "14618:171:3",
                    "text": " @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not\n emitted in the context of transfers."
                  },
                  "id": 1194,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nameLocation": "14803:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1138,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1131,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "14820:2:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1194,
                        "src": "14812:10:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14812:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1133,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "14832:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1194,
                        "src": "14824:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1132,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14824:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1135,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "14849:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1194,
                        "src": "14841:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1134,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14841:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1137,
                        "mutability": "mutable",
                        "name": "emitEvent",
                        "nameLocation": "14860:9:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1194,
                        "src": "14855:14:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1136,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "14855:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14811:59:3"
                  },
                  "returnParameters": {
                    "id": 1139,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14888:0:3"
                  },
                  "scope": 1261,
                  "src": "14794:662:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1230,
                    "nodeType": "Block",
                    "src": "15758:219:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1204,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1199,
                            "src": "15772:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1207,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15792:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1206,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15784:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1205,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "15784:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15784:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "15772:22:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1215,
                        "nodeType": "IfStatement",
                        "src": "15768:91:3",
                        "trueBody": {
                          "id": 1214,
                          "nodeType": "Block",
                          "src": "15796:63:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 1211,
                                    "name": "operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1199,
                                    "src": "15839:8:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1210,
                                  "name": "ERC721InvalidOperator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 256,
                                  "src": "15817:21:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 1212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15817:31:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1213,
                              "nodeType": "RevertStatement",
                              "src": "15810:38:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1216,
                                "name": "_operatorApprovals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 357,
                                "src": "15868:18:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 1219,
                              "indexExpression": {
                                "id": 1217,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1197,
                                "src": "15887:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15868:25:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1220,
                            "indexExpression": {
                              "id": 1218,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1199,
                              "src": "15894:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "15868:35:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1221,
                            "name": "approved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1201,
                            "src": "15906:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "15868:46:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1223,
                        "nodeType": "ExpressionStatement",
                        "src": "15868:46:3"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1225,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1197,
                              "src": "15944:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1226,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1199,
                              "src": "15951:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1227,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1201,
                              "src": "15961:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1224,
                            "name": "ApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1295,
                            "src": "15929:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 1228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15929:41:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1229,
                        "nodeType": "EmitStatement",
                        "src": "15924:46:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1195,
                    "nodeType": "StructuredDocumentation",
                    "src": "15462:198:3",
                    "text": " @dev Approve `operator` to operate on all of `owner` tokens\n Requirements:\n - operator can't be the address zero.\n Emits an {ApprovalForAll} event."
                  },
                  "id": 1231,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setApprovalForAll",
                  "nameLocation": "15674:18:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1197,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "15701:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1231,
                        "src": "15693:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1196,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15693:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1199,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "15716:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1231,
                        "src": "15708:16:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1198,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15708:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1201,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "15731:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1231,
                        "src": "15726:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1200,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "15726:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15692:48:3"
                  },
                  "returnParameters": {
                    "id": 1203,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15758:0:3"
                  },
                  "scope": 1261,
                  "src": "15665:312:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1259,
                    "nodeType": "Block",
                    "src": "16284:169:3",
                    "statements": [
                      {
                        "assignments": [
                          1240
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1240,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "16302:5:3",
                            "nodeType": "VariableDeclaration",
                            "scope": 1259,
                            "src": "16294:13:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1239,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "16294:7:3",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1244,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1242,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1234,
                              "src": "16319:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1241,
                            "name": "_ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 682,
                            "src": "16310:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 1243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16310:17:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16294:33:3"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1250,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1245,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1240,
                            "src": "16341:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1248,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16358:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1247,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16350:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1246,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16350:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16350:10:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "16341:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1256,
                        "nodeType": "IfStatement",
                        "src": "16337:88:3",
                        "trueBody": {
                          "id": 1255,
                          "nodeType": "Block",
                          "src": "16362:63:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 1252,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1234,
                                    "src": "16406:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1251,
                                  "name": "ERC721NonexistentToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 220,
                                  "src": "16383:22:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 1253,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16383:31:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1254,
                              "nodeType": "RevertStatement",
                              "src": "16376:38:3"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1257,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1240,
                          "src": "16441:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1238,
                        "id": 1258,
                        "nodeType": "Return",
                        "src": "16434:12:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1232,
                    "nodeType": "StructuredDocumentation",
                    "src": "15983:224:3",
                    "text": " @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).\n Returns the owner.\n Overrides to ownership logic should be done to {_ownerOf}."
                  },
                  "id": 1260,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_requireOwned",
                  "nameLocation": "16221:13:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1234,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "16243:7:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1260,
                        "src": "16235:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1233,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16235:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16234:17:3"
                  },
                  "returnParameters": {
                    "id": 1238,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1237,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1260,
                        "src": "16275:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1236,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16275:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16274:9:3"
                  },
                  "scope": 1261,
                  "src": "16212:241:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1262,
              "src": "775:15680:3",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256
              ],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "107:16349:3"
        },
        "id": 3
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
          "exportedSymbols": {
            "IERC165": [
              5089
            ],
            "IERC721": [
              1378
            ]
          },
          "id": 1379,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1263,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "108:24:4"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "../../utils/introspection/IERC165.sol",
              "id": 1265,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1379,
              "sourceUnit": 5090,
              "src": "134:62:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1264,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5089,
                    "src": "142:7:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1267,
                    "name": "IERC165",
                    "nameLocations": [
                      "288:7:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5089,
                    "src": "288:7:4"
                  },
                  "id": 1268,
                  "nodeType": "InheritanceSpecifier",
                  "src": "288:7:4"
                }
              ],
              "canonicalName": "IERC721",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1266,
                "nodeType": "StructuredDocumentation",
                "src": "198:68:4",
                "text": " @dev Required interface of an ERC-721 compliant contract."
              },
              "fullyImplemented": false,
              "id": 1378,
              "linearizedBaseContracts": [
                1378,
                5089
              ],
              "name": "IERC721",
              "nameLocation": "277:7:4",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1269,
                    "nodeType": "StructuredDocumentation",
                    "src": "302:88:4",
                    "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
                  },
                  "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                  "id": 1277,
                  "name": "Transfer",
                  "nameLocation": "401:8:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1271,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "426:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1277,
                        "src": "410:20:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1270,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "410:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1273,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "448:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1277,
                        "src": "432:18:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1272,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "432:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1275,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "468:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1277,
                        "src": "452:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "452:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "409:67:4"
                  },
                  "src": "395:82:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1278,
                    "nodeType": "StructuredDocumentation",
                    "src": "483:94:4",
                    "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
                  },
                  "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
                  "id": 1286,
                  "name": "Approval",
                  "nameLocation": "588:8:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1285,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1280,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "613:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1286,
                        "src": "597:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1279,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "597:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1282,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "636:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1286,
                        "src": "620:24:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1281,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "620:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1284,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "662:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1286,
                        "src": "646:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1283,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "646:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "596:74:4"
                  },
                  "src": "582:89:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1287,
                    "nodeType": "StructuredDocumentation",
                    "src": "677:117:4",
                    "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
                  },
                  "eventSelector": "17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31",
                  "id": 1295,
                  "name": "ApprovalForAll",
                  "nameLocation": "805:14:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1294,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1289,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "836:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1295,
                        "src": "820:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1288,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "820:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1291,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "859:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1295,
                        "src": "843:24:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1290,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "843:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1293,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "874:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1295,
                        "src": "869:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1292,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "869:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "819:64:4"
                  },
                  "src": "799:85:4"
                },
                {
                  "documentation": {
                    "id": 1296,
                    "nodeType": "StructuredDocumentation",
                    "src": "890:76:4",
                    "text": " @dev Returns the number of tokens in ``owner``'s account."
                  },
                  "functionSelector": "70a08231",
                  "id": 1303,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "980:9:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1299,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1298,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "998:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1303,
                        "src": "990:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1297,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "990:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "989:15:4"
                  },
                  "returnParameters": {
                    "id": 1302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1301,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "1036:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1303,
                        "src": "1028:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1300,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1028:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1027:17:4"
                  },
                  "scope": 1378,
                  "src": "971:74:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1304,
                    "nodeType": "StructuredDocumentation",
                    "src": "1051:131:4",
                    "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "6352211e",
                  "id": 1311,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nameLocation": "1196:7:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1306,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1212:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1311,
                        "src": "1204:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1204:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1203:17:4"
                  },
                  "returnParameters": {
                    "id": 1310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1309,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1252:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1311,
                        "src": "1244:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1308,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1244:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1243:15:4"
                  },
                  "scope": 1378,
                  "src": "1187:72:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1312,
                    "nodeType": "StructuredDocumentation",
                    "src": "1265:565:4",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n   a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "b88d4fde",
                  "id": 1323,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "1844:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1314,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1869:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1323,
                        "src": "1861:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1313,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1861:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1316,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1883:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1323,
                        "src": "1875:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1315,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1875:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1318,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1895:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1323,
                        "src": "1887:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1317,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1887:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1320,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "1919:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1323,
                        "src": "1904:19:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1319,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1904:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1860:64:4"
                  },
                  "returnParameters": {
                    "id": 1322,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1933:0:4"
                  },
                  "scope": 1378,
                  "src": "1835:99:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1324,
                    "nodeType": "StructuredDocumentation",
                    "src": "1940:706:4",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC-721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n   {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n   a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "42842e0e",
                  "id": 1333,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "2660:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1331,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1326,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2685:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1333,
                        "src": "2677:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1325,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2677:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1328,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2699:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1333,
                        "src": "2691:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1327,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2691:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1330,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2711:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1333,
                        "src": "2703:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1329,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2703:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2676:43:4"
                  },
                  "returnParameters": {
                    "id": 1332,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2728:0:4"
                  },
                  "scope": 1378,
                  "src": "2651:78:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1334,
                    "nodeType": "StructuredDocumentation",
                    "src": "2735:733:4",
                    "text": " @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\n or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n understand this adds an external call which potentially creates a reentrancy vulnerability.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 1343,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "3482:12:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1341,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1336,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "3503:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1343,
                        "src": "3495:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1335,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3495:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1338,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3517:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1343,
                        "src": "3509:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1337,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3509:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1340,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3529:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1343,
                        "src": "3521:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1339,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3521:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3494:43:4"
                  },
                  "returnParameters": {
                    "id": 1342,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3546:0:4"
                  },
                  "scope": 1378,
                  "src": "3473:74:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1344,
                    "nodeType": "StructuredDocumentation",
                    "src": "3553:452:4",
                    "text": " @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 1351,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "4019:7:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1349,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1346,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4035:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1351,
                        "src": "4027:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1345,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4027:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1348,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4047:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1351,
                        "src": "4039:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1347,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4039:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4026:29:4"
                  },
                  "returnParameters": {
                    "id": 1350,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4064:0:4"
                  },
                  "scope": 1378,
                  "src": "4010:55:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1352,
                    "nodeType": "StructuredDocumentation",
                    "src": "4071:315:4",
                    "text": " @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the address zero.\n Emits an {ApprovalForAll} event."
                  },
                  "functionSelector": "a22cb465",
                  "id": 1359,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "4400:17:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1354,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4426:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1359,
                        "src": "4418:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1353,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4418:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1356,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "4441:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1359,
                        "src": "4436:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1355,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4436:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4417:33:4"
                  },
                  "returnParameters": {
                    "id": 1358,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4459:0:4"
                  },
                  "scope": 1378,
                  "src": "4391:69:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1360,
                    "nodeType": "StructuredDocumentation",
                    "src": "4466:139:4",
                    "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "081812fc",
                  "id": 1367,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApproved",
                  "nameLocation": "4619:11:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1362,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4639:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1367,
                        "src": "4631:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1361,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4631:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4630:17:4"
                  },
                  "returnParameters": {
                    "id": 1366,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1365,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4679:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1367,
                        "src": "4671:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1364,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4671:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4670:18:4"
                  },
                  "scope": 1378,
                  "src": "4610:79:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1368,
                    "nodeType": "StructuredDocumentation",
                    "src": "4695:138:4",
                    "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
                  },
                  "functionSelector": "e985e9c5",
                  "id": 1377,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "4847:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1373,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1370,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "4872:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1377,
                        "src": "4864:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1369,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4864:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1372,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4887:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1377,
                        "src": "4879:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1371,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4879:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4863:33:4"
                  },
                  "returnParameters": {
                    "id": 1376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1375,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1377,
                        "src": "4920:4:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1374,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4920:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4919:6:4"
                  },
                  "scope": 1378,
                  "src": "4838:88:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1379,
              "src": "267:4661:4",
              "usedErrors": [],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "108:4821:4"
        },
        "id": 4
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
          "exportedSymbols": {
            "IERC721Receiver": [
              1396
            ]
          },
          "id": 1397,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1380,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "116:24:5"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC721Receiver",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1381,
                "nodeType": "StructuredDocumentation",
                "src": "142:154:5",
                "text": " @title ERC-721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC-721 asset contracts."
              },
              "fullyImplemented": false,
              "id": 1396,
              "linearizedBaseContracts": [
                1396
              ],
              "name": "IERC721Receiver",
              "nameLocation": "307:15:5",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1382,
                    "nodeType": "StructuredDocumentation",
                    "src": "329:500:5",
                    "text": " @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\n It must return its Solidity selector to confirm the token transfer.\n If any other value is returned or the interface is not implemented by the recipient, the transfer will be\n reverted.\n The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`."
                  },
                  "functionSelector": "150b7a02",
                  "id": 1395,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "onERC721Received",
                  "nameLocation": "843:16:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1391,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1384,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "877:8:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1395,
                        "src": "869:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1383,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "869:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1386,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "903:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1395,
                        "src": "895:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1385,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "895:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1388,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "925:7:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1395,
                        "src": "917:15:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1387,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "917:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1390,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "957:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1395,
                        "src": "942:19:5",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1389,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "942:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "859:108:5"
                  },
                  "returnParameters": {
                    "id": 1394,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1393,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1395,
                        "src": "986:6:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1392,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "986:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "985:8:5"
                  },
                  "scope": 1396,
                  "src": "834:160:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1397,
              "src": "297:699:5",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "116:881:5"
        },
        "id": 5
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol",
          "exportedSymbols": {
            "Context": [
              2309
            ],
            "ERC721": [
              1261
            ],
            "ERC721Burnable": [
              1425
            ]
          },
          "id": 1426,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1398,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "126:24:6"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "../ERC721.sol",
              "id": 1400,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1426,
              "sourceUnit": 1262,
              "src": "152:37:6",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1399,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "160:6:6",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../../../utils/Context.sol",
              "id": 1402,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1426,
              "sourceUnit": 2310,
              "src": "190:51:6",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1401,
                    "name": "Context",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2309,
                    "src": "198:7:6",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1404,
                    "name": "Context",
                    "nameLocations": [
                      "374:7:6"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2309,
                    "src": "374:7:6"
                  },
                  "id": 1405,
                  "nodeType": "InheritanceSpecifier",
                  "src": "374:7:6"
                },
                {
                  "baseName": {
                    "id": 1406,
                    "name": "ERC721",
                    "nameLocations": [
                      "383:6:6"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1261,
                    "src": "383:6:6"
                  },
                  "id": 1407,
                  "nodeType": "InheritanceSpecifier",
                  "src": "383:6:6"
                }
              ],
              "canonicalName": "ERC721Burnable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1403,
                "nodeType": "StructuredDocumentation",
                "src": "243:94:6",
                "text": " @title ERC-721 Burnable Token\n @dev ERC-721 Token that can be burned (destroyed)."
              },
              "fullyImplemented": true,
              "id": 1425,
              "linearizedBaseContracts": [
                1425,
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721Burnable",
              "nameLocation": "356:14:6",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1423,
                    "nodeType": "Block",
                    "src": "609:268:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "844:1:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "836:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1414,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "836:7:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1417,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "836:10:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1418,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1410,
                              "src": "848:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1419,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "857:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 1420,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "857:12:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1413,
                            "name": "_update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 874,
                            "src": "828:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 1421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "828:42:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1422,
                        "nodeType": "ExpressionStatement",
                        "src": "828:42:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1408,
                    "nodeType": "StructuredDocumentation",
                    "src": "396:162:6",
                    "text": " @dev Burns `tokenId`. See {ERC721-_burn}.\n Requirements:\n - The caller must own `tokenId` or be an approved operator."
                  },
                  "functionSelector": "42966c68",
                  "id": 1424,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "572:4:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1410,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "585:7:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 1424,
                        "src": "577:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "577:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "576:17:6"
                  },
                  "returnParameters": {
                    "id": 1412,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "609:0:6"
                  },
                  "scope": 1425,
                  "src": "563:314:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 1426,
              "src": "338:541:6",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256
              ],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "126:754:6"
        },
        "id": 6
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol",
          "exportedSymbols": {
            "ERC721": [
              1261
            ],
            "ERC721Enumerable": [
              1811
            ],
            "IERC165": [
              5089
            ],
            "IERC721Enumerable": [
              1907
            ]
          },
          "id": 1812,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1427,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "128:24:7"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "../ERC721.sol",
              "id": 1429,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1812,
              "sourceUnit": 1262,
              "src": "154:37:7",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1428,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "162:6:7",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
              "file": "./IERC721Enumerable.sol",
              "id": 1431,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1812,
              "sourceUnit": 1908,
              "src": "192:58:7",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1430,
                    "name": "IERC721Enumerable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1907,
                    "src": "200:17:7",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
              "file": "../../../utils/introspection/ERC165.sol",
              "id": 1433,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1812,
              "sourceUnit": 5078,
              "src": "251:64:7",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1432,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5089,
                    "src": "259:7:7",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1435,
                    "name": "ERC721",
                    "nameLocations": [
                      "746:6:7"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1261,
                    "src": "746:6:7"
                  },
                  "id": 1436,
                  "nodeType": "InheritanceSpecifier",
                  "src": "746:6:7"
                },
                {
                  "baseName": {
                    "id": 1437,
                    "name": "IERC721Enumerable",
                    "nameLocations": [
                      "754:17:7"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1907,
                    "src": "754:17:7"
                  },
                  "id": 1438,
                  "nodeType": "InheritanceSpecifier",
                  "src": "754:17:7"
                }
              ],
              "canonicalName": "ERC721Enumerable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1434,
                "nodeType": "StructuredDocumentation",
                "src": "317:390:7",
                "text": " @dev This implements an optional extension of {ERC721} defined in the ERC that adds enumerability\n of all the token ids in the contract as well as all token ids owned by each account.\n CAUTION: {ERC721} extensions that implement custom `balanceOf` logic, such as {ERC721Consecutive},\n interfere with enumerability and should not be used together with {ERC721Enumerable}."
              },
              "fullyImplemented": true,
              "id": 1811,
              "linearizedBaseContracts": [
                1811,
                1907,
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721Enumerable",
              "nameLocation": "726:16:7",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 1444,
                  "mutability": "mutable",
                  "name": "_ownedTokens",
                  "nameLocation": "846:12:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 1811,
                  "src": "778:80:7",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(uint256 => uint256))"
                  },
                  "typeName": {
                    "id": 1443,
                    "keyName": "owner",
                    "keyNameLocation": "794:5:7",
                    "keyType": {
                      "id": 1439,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "786:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "778:59:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(uint256 => uint256))"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 1442,
                      "keyName": "index",
                      "keyNameLocation": "819:5:7",
                      "keyType": {
                        "id": 1440,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "811:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "803:33:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      },
                      "valueName": "",
                      "valueNameLocation": "-1:-1:-1",
                      "valueType": {
                        "id": 1441,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "828:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1448,
                  "mutability": "mutable",
                  "name": "_ownedTokensIndex",
                  "nameLocation": "908:17:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 1811,
                  "src": "864:61:7",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                    "typeString": "mapping(uint256 => uint256)"
                  },
                  "typeName": {
                    "id": 1447,
                    "keyName": "tokenId",
                    "keyNameLocation": "880:7:7",
                    "keyType": {
                      "id": 1445,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "872:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "864:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                      "typeString": "mapping(uint256 => uint256)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 1446,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "891:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1451,
                  "mutability": "mutable",
                  "name": "_allTokens",
                  "nameLocation": "950:10:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 1811,
                  "src": "932:28:7",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1449,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "932:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1450,
                    "nodeType": "ArrayTypeName",
                    "src": "932:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1455,
                  "mutability": "mutable",
                  "name": "_allTokensIndex",
                  "nameLocation": "1010:15:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 1811,
                  "src": "966:59:7",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                    "typeString": "mapping(uint256 => uint256)"
                  },
                  "typeName": {
                    "id": 1454,
                    "keyName": "tokenId",
                    "keyNameLocation": "982:7:7",
                    "keyType": {
                      "id": 1452,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "974:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "966:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                      "typeString": "mapping(uint256 => uint256)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 1453,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "993:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 1456,
                    "nodeType": "StructuredDocumentation",
                    "src": "1032:168:7",
                    "text": " @dev An `owner`'s token query was out of bounds for `index`.\n NOTE: The owner being `address(0)` indicates a global out of bounds index."
                  },
                  "errorSelector": "a57d13dc",
                  "id": 1462,
                  "name": "ERC721OutOfBoundsIndex",
                  "nameLocation": "1211:22:7",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 1461,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1458,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1242:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1462,
                        "src": "1234:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1457,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1234:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1460,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "1257:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1462,
                        "src": "1249:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1459,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1249:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1233:30:7"
                  },
                  "src": "1205:59:7"
                },
                {
                  "documentation": {
                    "id": 1463,
                    "nodeType": "StructuredDocumentation",
                    "src": "1270:50:7",
                    "text": " @dev Batch mint is not allowed."
                  },
                  "errorSelector": "59171fc1",
                  "id": 1465,
                  "name": "ERC721EnumerableForbiddenBatchMint",
                  "nameLocation": "1331:34:7",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 1464,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1365:2:7"
                  },
                  "src": "1325:43:7"
                },
                {
                  "baseFunctions": [
                    405,
                    5088
                  ],
                  "body": {
                    "id": 1488,
                    "nodeType": "Block",
                    "src": "1543:114:7",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 1481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1476,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1468,
                              "src": "1560:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1478,
                                    "name": "IERC721Enumerable",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1907,
                                    "src": "1580:17:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC721Enumerable_$1907_$",
                                      "typeString": "type(contract IERC721Enumerable)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_contract$_IERC721Enumerable_$1907_$",
                                      "typeString": "type(contract IERC721Enumerable)"
                                    }
                                  ],
                                  "id": 1477,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "1575:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 1479,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1575:23:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721Enumerable_$1907",
                                  "typeString": "type(contract IERC721Enumerable)"
                                }
                              },
                              "id": 1480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "1599:11:7",
                              "memberName": "interfaceId",
                              "nodeType": "MemberAccess",
                              "src": "1575:35:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "1560:50:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 1484,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1468,
                                "src": "1638:11:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 1482,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "1614:5:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_ERC721Enumerable_$1811_$",
                                  "typeString": "type(contract super ERC721Enumerable)"
                                }
                              },
                              "id": 1483,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1620:17:7",
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 405,
                              "src": "1614:23:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 1485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1614:36:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1560:90:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1475,
                        "id": 1487,
                        "nodeType": "Return",
                        "src": "1553:97:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1466,
                    "nodeType": "StructuredDocumentation",
                    "src": "1374:56:7",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 1489,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "1444:17:7",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1472,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 1470,
                        "name": "IERC165",
                        "nameLocations": [
                          "1511:7:7"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5089,
                        "src": "1511:7:7"
                      },
                      {
                        "id": 1471,
                        "name": "ERC721",
                        "nameLocations": [
                          "1520:6:7"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "1520:6:7"
                      }
                    ],
                    "src": "1502:25:7"
                  },
                  "parameters": {
                    "id": 1469,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1468,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "1469:11:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1489,
                        "src": "1462:18:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1467,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1462:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1461:20:7"
                  },
                  "returnParameters": {
                    "id": 1475,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1474,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1489,
                        "src": "1537:4:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1473,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1537:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1536:6:7"
                  },
                  "scope": 1811,
                  "src": "1435:222:7",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1898
                  ],
                  "body": {
                    "id": 1517,
                    "nodeType": "Block",
                    "src": "1833:158:7",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1499,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1494,
                            "src": "1847:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 1501,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1492,
                                "src": "1866:5:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1500,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 433,
                              "src": "1856:9:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 1502,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1856:16:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1847:25:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1510,
                        "nodeType": "IfStatement",
                        "src": "1843:99:7",
                        "trueBody": {
                          "id": 1509,
                          "nodeType": "Block",
                          "src": "1874:68:7",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 1505,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1492,
                                    "src": "1918:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1506,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1494,
                                    "src": "1925:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1504,
                                  "name": "ERC721OutOfBoundsIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1462,
                                  "src": "1895:22:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256) pure"
                                  }
                                },
                                "id": 1507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1895:36:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1508,
                              "nodeType": "RevertStatement",
                              "src": "1888:43:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 1511,
                              "name": "_ownedTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1444,
                              "src": "1958:12:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 1513,
                            "indexExpression": {
                              "id": 1512,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1492,
                              "src": "1971:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1958:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 1515,
                          "indexExpression": {
                            "id": 1514,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1494,
                            "src": "1978:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1958:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1498,
                        "id": 1516,
                        "nodeType": "Return",
                        "src": "1951:33:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1490,
                    "nodeType": "StructuredDocumentation",
                    "src": "1663:68:7",
                    "text": " @dev See {IERC721Enumerable-tokenOfOwnerByIndex}."
                  },
                  "functionSelector": "2f745c59",
                  "id": 1518,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenOfOwnerByIndex",
                  "nameLocation": "1745:19:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1495,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1492,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1773:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1518,
                        "src": "1765:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1491,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1765:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1494,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "1788:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1518,
                        "src": "1780:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1493,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1780:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1764:30:7"
                  },
                  "returnParameters": {
                    "id": 1498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1497,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1518,
                        "src": "1824:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1496,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1824:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1823:9:7"
                  },
                  "scope": 1811,
                  "src": "1736:255:7",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1888
                  ],
                  "body": {
                    "id": 1527,
                    "nodeType": "Block",
                    "src": "2123:41:7",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1524,
                            "name": "_allTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1451,
                            "src": "2140:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 1525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2151:6:7",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "2140:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1523,
                        "id": 1526,
                        "nodeType": "Return",
                        "src": "2133:24:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1519,
                    "nodeType": "StructuredDocumentation",
                    "src": "1997:60:7",
                    "text": " @dev See {IERC721Enumerable-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 1528,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "2071:11:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1520,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2082:2:7"
                  },
                  "returnParameters": {
                    "id": 1523,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1522,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1528,
                        "src": "2114:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1521,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2114:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2113:9:7"
                  },
                  "scope": 1811,
                  "src": "2062:102:7",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1906
                  ],
                  "body": {
                    "id": 1554,
                    "nodeType": "Block",
                    "src": "2311:151:7",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1536,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1531,
                            "src": "2325:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1537,
                              "name": "totalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1528,
                              "src": "2334:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 1538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2334:13:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2325:22:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1549,
                        "nodeType": "IfStatement",
                        "src": "2321:101:7",
                        "trueBody": {
                          "id": 1548,
                          "nodeType": "Block",
                          "src": "2349:73:7",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1543,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2401:1:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1542,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2393:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1541,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2393:7:7",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1544,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2393:10:7",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1545,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1531,
                                    "src": "2405:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1540,
                                  "name": "ERC721OutOfBoundsIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1462,
                                  "src": "2370:22:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256) pure"
                                  }
                                },
                                "id": 1546,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2370:41:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1547,
                              "nodeType": "RevertStatement",
                              "src": "2363:48:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1550,
                            "name": "_allTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1451,
                            "src": "2438:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 1552,
                          "indexExpression": {
                            "id": 1551,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1531,
                            "src": "2449:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2438:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1535,
                        "id": 1553,
                        "nodeType": "Return",
                        "src": "2431:24:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1529,
                    "nodeType": "StructuredDocumentation",
                    "src": "2170:61:7",
                    "text": " @dev See {IERC721Enumerable-tokenByIndex}."
                  },
                  "functionSelector": "4f6ccce7",
                  "id": 1555,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenByIndex",
                  "nameLocation": "2245:12:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1531,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "2266:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1555,
                        "src": "2258:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1530,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2258:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2257:15:7"
                  },
                  "returnParameters": {
                    "id": 1535,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1534,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1555,
                        "src": "2302:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1533,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2302:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2301:9:7"
                  },
                  "scope": 1811,
                  "src": "2236:226:7",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    874
                  ],
                  "body": {
                    "id": 1623,
                    "nodeType": "Block",
                    "src": "2622:521:7",
                    "statements": [
                      {
                        "assignments": [
                          1569
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1569,
                            "mutability": "mutable",
                            "name": "previousOwner",
                            "nameLocation": "2640:13:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1623,
                            "src": "2632:21:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1568,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2632:7:7",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1576,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1572,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1558,
                              "src": "2670:2:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1573,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1560,
                              "src": "2674:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1574,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1562,
                              "src": "2683:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 1570,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "2656:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721Enumerable_$1811_$",
                                "typeString": "type(contract super ERC721Enumerable)"
                              }
                            },
                            "id": 1571,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2662:7:7",
                            "memberName": "_update",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 874,
                            "src": "2656:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 1575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2656:32:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2632:56:7"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1577,
                            "name": "previousOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1569,
                            "src": "2703:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1580,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2728:1:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1579,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2720:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1578,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2720:7:7",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1581,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2720:10:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2703:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1588,
                              "name": "previousOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1569,
                              "src": "2807:13:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 1589,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1558,
                              "src": "2824:2:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2807:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 1597,
                          "nodeType": "IfStatement",
                          "src": "2803:106:7",
                          "trueBody": {
                            "id": 1596,
                            "nodeType": "Block",
                            "src": "2828:81:7",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1592,
                                      "name": "previousOwner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1569,
                                      "src": "2875:13:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 1593,
                                      "name": "tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1560,
                                      "src": "2890:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1591,
                                    "name": "_removeTokenFromOwnerEnumeration",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1737,
                                    "src": "2842:32:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                      "typeString": "function (address,uint256)"
                                    }
                                  },
                                  "id": 1594,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2842:56:7",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 1595,
                                "nodeType": "ExpressionStatement",
                                "src": "2842:56:7"
                              }
                            ]
                          }
                        },
                        "id": 1598,
                        "nodeType": "IfStatement",
                        "src": "2699:210:7",
                        "trueBody": {
                          "id": 1587,
                          "nodeType": "Block",
                          "src": "2732:65:7",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1584,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1560,
                                    "src": "2778:7:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1583,
                                  "name": "_addTokenToAllTokensEnumeration",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1675,
                                  "src": "2746:31:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 1585,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2746:40:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1586,
                              "nodeType": "ExpressionStatement",
                              "src": "2746:40:7"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1604,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1599,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1558,
                            "src": "2922:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1602,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2936:1:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2928:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1600,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2928:7:7",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1603,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2928:10:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2922:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1610,
                              "name": "previousOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1569,
                              "src": "3020:13:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 1611,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1558,
                              "src": "3037:2:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3020:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 1619,
                          "nodeType": "IfStatement",
                          "src": "3016:90:7",
                          "trueBody": {
                            "id": 1618,
                            "nodeType": "Block",
                            "src": "3041:65:7",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1614,
                                      "name": "to",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1558,
                                      "src": "3083:2:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 1615,
                                      "name": "tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1560,
                                      "src": "3087:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1613,
                                    "name": "_addTokenToOwnerEnumeration",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1655,
                                    "src": "3055:27:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                      "typeString": "function (address,uint256)"
                                    }
                                  },
                                  "id": 1616,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3055:40:7",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 1617,
                                "nodeType": "ExpressionStatement",
                                "src": "3055:40:7"
                              }
                            ]
                          }
                        },
                        "id": 1620,
                        "nodeType": "IfStatement",
                        "src": "2918:188:7",
                        "trueBody": {
                          "id": 1609,
                          "nodeType": "Block",
                          "src": "2940:70:7",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1606,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1560,
                                    "src": "2991:7:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1605,
                                  "name": "_removeTokenFromAllTokensEnumeration",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1785,
                                  "src": "2954:36:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 1607,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2954:45:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1608,
                              "nodeType": "ExpressionStatement",
                              "src": "2954:45:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1621,
                          "name": "previousOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1569,
                          "src": "3123:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1567,
                        "id": 1622,
                        "nodeType": "Return",
                        "src": "3116:20:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1556,
                    "nodeType": "StructuredDocumentation",
                    "src": "2468:45:7",
                    "text": " @dev See {ERC721-_update}."
                  },
                  "id": 1624,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "2527:7:7",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1564,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2595:8:7"
                  },
                  "parameters": {
                    "id": 1563,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1558,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2543:2:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1624,
                        "src": "2535:10:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1557,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2535:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1560,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2555:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1624,
                        "src": "2547:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1559,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2547:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1562,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "2572:4:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1624,
                        "src": "2564:12:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1561,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2564:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2534:43:7"
                  },
                  "returnParameters": {
                    "id": 1567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1566,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1624,
                        "src": "2613:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1565,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2613:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2612:9:7"
                  },
                  "scope": 1811,
                  "src": "2518:625:7",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1654,
                    "nodeType": "Block",
                    "src": "3511:140:7",
                    "statements": [
                      {
                        "assignments": [
                          1633
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1633,
                            "mutability": "mutable",
                            "name": "length",
                            "nameLocation": "3529:6:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1654,
                            "src": "3521:14:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1632,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3521:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1639,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 1635,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1627,
                                "src": "3548:2:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1634,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 433,
                              "src": "3538:9:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 1636,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3538:13:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 1637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3554:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "3538:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3521:34:7"
                      },
                      {
                        "expression": {
                          "id": 1646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1640,
                                "name": "_ownedTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1444,
                                "src": "3565:12:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 1643,
                              "indexExpression": {
                                "id": 1641,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1627,
                                "src": "3578:2:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3565:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 1644,
                            "indexExpression": {
                              "id": 1642,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1633,
                              "src": "3582:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3565:24:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1645,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1629,
                            "src": "3592:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3565:34:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1647,
                        "nodeType": "ExpressionStatement",
                        "src": "3565:34:7"
                      },
                      {
                        "expression": {
                          "id": 1652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1648,
                              "name": "_ownedTokensIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1448,
                              "src": "3609:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 1650,
                            "indexExpression": {
                              "id": 1649,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1629,
                              "src": "3627:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3609:26:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1651,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1633,
                            "src": "3638:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3609:35:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1653,
                        "nodeType": "ExpressionStatement",
                        "src": "3609:35:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1625,
                    "nodeType": "StructuredDocumentation",
                    "src": "3149:283:7",
                    "text": " @dev Private function to add a token to this extension's ownership-tracking data structures.\n @param to address representing the new owner of the given token ID\n @param tokenId uint256 ID of the token to be added to the tokens list of the given address"
                  },
                  "id": 1655,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_addTokenToOwnerEnumeration",
                  "nameLocation": "3446:27:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1627,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3482:2:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1655,
                        "src": "3474:10:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3474:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1629,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3494:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1655,
                        "src": "3486:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1628,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3486:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3473:29:7"
                  },
                  "returnParameters": {
                    "id": 1631,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3511:0:7"
                  },
                  "scope": 1811,
                  "src": "3437:214:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1674,
                    "nodeType": "Block",
                    "src": "3912:95:7",
                    "statements": [
                      {
                        "expression": {
                          "id": 1666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1661,
                              "name": "_allTokensIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "3922:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 1663,
                            "indexExpression": {
                              "id": 1662,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1658,
                              "src": "3938:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3922:24:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1664,
                              "name": "_allTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1451,
                              "src": "3949:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 1665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3960:6:7",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "3949:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3922:44:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1667,
                        "nodeType": "ExpressionStatement",
                        "src": "3922:44:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1671,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1658,
                              "src": "3992:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1668,
                              "name": "_allTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1451,
                              "src": "3976:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 1670,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3987:4:7",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "3976:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$attached_to$_t_array$_t_uint256_$dyn_storage_ptr_$",
                              "typeString": "function (uint256[] storage pointer,uint256)"
                            }
                          },
                          "id": 1672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3976:24:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1673,
                        "nodeType": "ExpressionStatement",
                        "src": "3976:24:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1656,
                    "nodeType": "StructuredDocumentation",
                    "src": "3657:184:7",
                    "text": " @dev Private function to add a token to this extension's token tracking data structures.\n @param tokenId uint256 ID of the token to be added to the tokens list"
                  },
                  "id": 1675,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_addTokenToAllTokensEnumeration",
                  "nameLocation": "3855:31:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1659,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1658,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3895:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1675,
                        "src": "3887:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1657,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3887:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3886:17:7"
                  },
                  "returnParameters": {
                    "id": 1660,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3912:0:7"
                  },
                  "scope": 1811,
                  "src": "3846:161:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1736,
                    "nodeType": "Block",
                    "src": "4705:974:7",
                    "statements": [
                      {
                        "assignments": [
                          1684
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1684,
                            "mutability": "mutable",
                            "name": "lastTokenIndex",
                            "nameLocation": "4894:14:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1736,
                            "src": "4886:22:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1683,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4886:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1688,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1686,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1678,
                              "src": "4921:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1685,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 433,
                            "src": "4911:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 1687,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4911:15:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4886:40:7"
                      },
                      {
                        "assignments": [
                          1690
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1690,
                            "mutability": "mutable",
                            "name": "tokenIndex",
                            "nameLocation": "4944:10:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1736,
                            "src": "4936:18:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1689,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4936:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1694,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1691,
                            "name": "_ownedTokensIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1448,
                            "src": "4957:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 1693,
                          "indexExpression": {
                            "id": 1692,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1680,
                            "src": "4975:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4957:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4936:47:7"
                      },
                      {
                        "assignments": [
                          1698
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1698,
                            "mutability": "mutable",
                            "name": "_ownedTokensByOwner",
                            "nameLocation": "5036:19:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1736,
                            "src": "4994:61:7",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            },
                            "typeName": {
                              "id": 1697,
                              "keyName": "index",
                              "keyNameLocation": "5010:5:7",
                              "keyType": {
                                "id": 1695,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5002:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Mapping",
                              "src": "4994:33:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              },
                              "valueName": "",
                              "valueNameLocation": "-1:-1:-1",
                              "valueType": {
                                "id": 1696,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5019:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1702,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1699,
                            "name": "_ownedTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1444,
                            "src": "5058:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                              "typeString": "mapping(address => mapping(uint256 => uint256))"
                            }
                          },
                          "id": 1701,
                          "indexExpression": {
                            "id": 1700,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1678,
                            "src": "5071:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5058:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4994:82:7"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1703,
                            "name": "tokenIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1690,
                            "src": "5180:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 1704,
                            "name": "lastTokenIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1684,
                            "src": "5194:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5180:28:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1725,
                        "nodeType": "IfStatement",
                        "src": "5176:325:7",
                        "trueBody": {
                          "id": 1724,
                          "nodeType": "Block",
                          "src": "5210:291:7",
                          "statements": [
                            {
                              "assignments": [
                                1707
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1707,
                                  "mutability": "mutable",
                                  "name": "lastTokenId",
                                  "nameLocation": "5232:11:7",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1724,
                                  "src": "5224:19:7",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1706,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5224:7:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1711,
                              "initialValue": {
                                "baseExpression": {
                                  "id": 1708,
                                  "name": "_ownedTokensByOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1698,
                                  "src": "5246:19:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 1710,
                                "indexExpression": {
                                  "id": 1709,
                                  "name": "lastTokenIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1684,
                                  "src": "5266:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5246:35:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5224:57:7"
                            },
                            {
                              "expression": {
                                "id": 1716,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 1712,
                                    "name": "_ownedTokensByOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1698,
                                    "src": "5296:19:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                      "typeString": "mapping(uint256 => uint256)"
                                    }
                                  },
                                  "id": 1714,
                                  "indexExpression": {
                                    "id": 1713,
                                    "name": "tokenIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1690,
                                    "src": "5316:10:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "5296:31:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 1715,
                                  "name": "lastTokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1707,
                                  "src": "5330:11:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5296:45:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1717,
                              "nodeType": "ExpressionStatement",
                              "src": "5296:45:7"
                            },
                            {
                              "expression": {
                                "id": 1722,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 1718,
                                    "name": "_ownedTokensIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1448,
                                    "src": "5413:17:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                      "typeString": "mapping(uint256 => uint256)"
                                    }
                                  },
                                  "id": 1720,
                                  "indexExpression": {
                                    "id": 1719,
                                    "name": "lastTokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1707,
                                    "src": "5431:11:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "5413:30:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 1721,
                                  "name": "tokenIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1690,
                                  "src": "5446:10:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5413:43:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1723,
                              "nodeType": "ExpressionStatement",
                              "src": "5413:43:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "5587:33:7",
                          "subExpression": {
                            "baseExpression": {
                              "id": 1726,
                              "name": "_ownedTokensIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1448,
                              "src": "5594:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 1728,
                            "indexExpression": {
                              "id": 1727,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1680,
                              "src": "5612:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5594:26:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1730,
                        "nodeType": "ExpressionStatement",
                        "src": "5587:33:7"
                      },
                      {
                        "expression": {
                          "id": 1734,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "5630:42:7",
                          "subExpression": {
                            "baseExpression": {
                              "id": 1731,
                              "name": "_ownedTokensByOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1698,
                              "src": "5637:19:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 1733,
                            "indexExpression": {
                              "id": 1732,
                              "name": "lastTokenIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1684,
                              "src": "5657:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5637:35:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1735,
                        "nodeType": "ExpressionStatement",
                        "src": "5630:42:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1676,
                    "nodeType": "StructuredDocumentation",
                    "src": "4013:606:7",
                    "text": " @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that\n while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for\n gas optimizations e.g. when performing a transfer operation (avoiding double writes).\n This has O(1) time complexity, but alters the order of the _ownedTokens array.\n @param from address representing the previous owner of the given token ID\n @param tokenId uint256 ID of the token to be removed from the tokens list of the given address"
                  },
                  "id": 1737,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_removeTokenFromOwnerEnumeration",
                  "nameLocation": "4633:32:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1681,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1678,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4674:4:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1737,
                        "src": "4666:12:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1677,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4666:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1680,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4688:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1737,
                        "src": "4680:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1679,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4680:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4665:31:7"
                  },
                  "returnParameters": {
                    "id": 1682,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4705:0:7"
                  },
                  "scope": 1811,
                  "src": "4624:1055:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1784,
                    "nodeType": "Block",
                    "src": "6038:990:7",
                    "statements": [
                      {
                        "assignments": [
                          1744
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1744,
                            "mutability": "mutable",
                            "name": "lastTokenIndex",
                            "nameLocation": "6224:14:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1784,
                            "src": "6216:22:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1743,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6216:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1749,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1745,
                              "name": "_allTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1451,
                              "src": "6241:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 1746,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6252:6:7",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "6241:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 1747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6261:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "6241:21:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6216:46:7"
                      },
                      {
                        "assignments": [
                          1751
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1751,
                            "mutability": "mutable",
                            "name": "tokenIndex",
                            "nameLocation": "6280:10:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1784,
                            "src": "6272:18:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1750,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6272:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1755,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1752,
                            "name": "_allTokensIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1455,
                            "src": "6293:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 1754,
                          "indexExpression": {
                            "id": 1753,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1740,
                            "src": "6309:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6293:24:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6272:45:7"
                      },
                      {
                        "assignments": [
                          1757
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1757,
                            "mutability": "mutable",
                            "name": "lastTokenId",
                            "nameLocation": "6647:11:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 1784,
                            "src": "6639:19:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1756,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6639:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1761,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1758,
                            "name": "_allTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1451,
                            "src": "6661:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 1760,
                          "indexExpression": {
                            "id": 1759,
                            "name": "lastTokenIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1744,
                            "src": "6672:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6661:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6639:48:7"
                      },
                      {
                        "expression": {
                          "id": 1766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1762,
                              "name": "_allTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1451,
                              "src": "6698:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 1764,
                            "indexExpression": {
                              "id": 1763,
                              "name": "tokenIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1751,
                              "src": "6709:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6698:22:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1765,
                            "name": "lastTokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1757,
                            "src": "6723:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6698:36:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1767,
                        "nodeType": "ExpressionStatement",
                        "src": "6698:36:7"
                      },
                      {
                        "expression": {
                          "id": 1772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1768,
                              "name": "_allTokensIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "6802:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 1770,
                            "indexExpression": {
                              "id": 1769,
                              "name": "lastTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1757,
                              "src": "6818:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6802:28:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1771,
                            "name": "tokenIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1751,
                            "src": "6833:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6802:41:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1773,
                        "nodeType": "ExpressionStatement",
                        "src": "6802:41:7"
                      },
                      {
                        "expression": {
                          "id": 1777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "6964:31:7",
                          "subExpression": {
                            "baseExpression": {
                              "id": 1774,
                              "name": "_allTokensIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "6971:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 1776,
                            "indexExpression": {
                              "id": 1775,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1740,
                              "src": "6987:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6971:24:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1778,
                        "nodeType": "ExpressionStatement",
                        "src": "6964:31:7"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 1779,
                              "name": "_allTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1451,
                              "src": "7005:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 1781,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7016:3:7",
                            "memberName": "pop",
                            "nodeType": "MemberAccess",
                            "src": "7005:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_uint256_$dyn_storage_ptr_$",
                              "typeString": "function (uint256[] storage pointer)"
                            }
                          },
                          "id": 1782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7005:16:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1783,
                        "nodeType": "ExpressionStatement",
                        "src": "7005:16:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1738,
                    "nodeType": "StructuredDocumentation",
                    "src": "5685:277:7",
                    "text": " @dev Private function to remove a token from this extension's token tracking data structures.\n This has O(1) time complexity, but alters the order of the _allTokens array.\n @param tokenId uint256 ID of the token to be removed from the tokens list"
                  },
                  "id": 1785,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_removeTokenFromAllTokensEnumeration",
                  "nameLocation": "5976:36:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1740,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "6021:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1785,
                        "src": "6013:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1739,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6013:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6012:17:7"
                  },
                  "returnParameters": {
                    "id": 1742,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6038:0:7"
                  },
                  "scope": 1811,
                  "src": "5967:1061:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    784
                  ],
                  "body": {
                    "id": 1809,
                    "nodeType": "Block",
                    "src": "7230:149:7",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 1796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1794,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1790,
                            "src": "7244:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7253:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7244:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1801,
                        "nodeType": "IfStatement",
                        "src": "7240:84:7",
                        "trueBody": {
                          "id": 1800,
                          "nodeType": "Block",
                          "src": "7256:68:7",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1797,
                                  "name": "ERC721EnumerableForbiddenBatchMint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1465,
                                  "src": "7277:34:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 1798,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7277:36:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1799,
                              "nodeType": "RevertStatement",
                              "src": "7270:43:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1805,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1788,
                              "src": "7356:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1806,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1790,
                              "src": "7365:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "id": 1802,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "7333:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721Enumerable_$1811_$",
                                "typeString": "type(contract super ERC721Enumerable)"
                              }
                            },
                            "id": 1804,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7339:16:7",
                            "memberName": "_increaseBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 784,
                            "src": "7333:22:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$",
                              "typeString": "function (address,uint128)"
                            }
                          },
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7333:39:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1808,
                        "nodeType": "ExpressionStatement",
                        "src": "7333:39:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1786,
                    "nodeType": "StructuredDocumentation",
                    "src": "7034:106:7",
                    "text": " See {ERC721-_increaseBalance}. We need that to account tokens that were minted in batch"
                  },
                  "id": 1810,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_increaseBalance",
                  "nameLocation": "7154:16:7",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1792,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7221:8:7"
                  },
                  "parameters": {
                    "id": 1791,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1788,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "7179:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1810,
                        "src": "7171:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1787,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7171:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1790,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "7196:6:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1810,
                        "src": "7188:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 1789,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "7188:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7170:33:7"
                  },
                  "returnParameters": {
                    "id": 1793,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7230:0:7"
                  },
                  "scope": 1811,
                  "src": "7145:234:7",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1812,
              "src": "708:6673:7",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256,
                1462,
                1465
              ],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "128:7254:7"
        },
        "id": 7
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol",
          "exportedSymbols": {
            "ERC721": [
              1261
            ],
            "ERC721Pausable": [
              1846
            ],
            "Pausable": [
              2469
            ]
          },
          "id": 1847,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1813,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "126:24:8"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "../ERC721.sol",
              "id": 1815,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1847,
              "sourceUnit": 1262,
              "src": "152:37:8",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1814,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "160:6:8",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
              "file": "../../../utils/Pausable.sol",
              "id": 1817,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1847,
              "sourceUnit": 2470,
              "src": "190:53:8",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1816,
                    "name": "Pausable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2469,
                    "src": "198:8:8",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1819,
                    "name": "ERC721",
                    "nameLocations": [
                      "971:6:8"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1261,
                    "src": "971:6:8"
                  },
                  "id": 1820,
                  "nodeType": "InheritanceSpecifier",
                  "src": "971:6:8"
                },
                {
                  "baseName": {
                    "id": 1821,
                    "name": "Pausable",
                    "nameLocations": [
                      "979:8:8"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2469,
                    "src": "979:8:8"
                  },
                  "id": 1822,
                  "nodeType": "InheritanceSpecifier",
                  "src": "979:8:8"
                }
              ],
              "canonicalName": "ERC721Pausable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1818,
                "nodeType": "StructuredDocumentation",
                "src": "245:689:8",
                "text": " @dev ERC-721 token with pausable token transfers, minting and burning.\n Useful for scenarios such as preventing trades until the end of an evaluation\n period, or having an emergency switch for freezing all token transfers in the\n event of a large bug.\n IMPORTANT: This contract does not include public pause and unpause functions. In\n addition to inheriting this contract, you must define both functions, invoking the\n {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate\n access control, e.g. using {AccessControl} or {Ownable}. Not doing so will\n make the contract pause mechanism of the contract unreachable, and thus unusable."
              },
              "fullyImplemented": true,
              "id": 1846,
              "linearizedBaseContracts": [
                1846,
                2469,
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721Pausable",
              "nameLocation": "953:14:8",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    874
                  ],
                  "body": {
                    "id": 1844,
                    "nodeType": "Block",
                    "src": "1269:56:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1839,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1825,
                              "src": "1300:2:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1840,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1827,
                              "src": "1304:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1841,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1829,
                              "src": "1313:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 1837,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1286:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721Pausable_$1846_$",
                                "typeString": "type(contract super ERC721Pausable)"
                              }
                            },
                            "id": 1838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1292:7:8",
                            "memberName": "_update",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 874,
                            "src": "1286:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 1842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1286:32:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1836,
                        "id": 1843,
                        "nodeType": "Return",
                        "src": "1279:39:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1823,
                    "nodeType": "StructuredDocumentation",
                    "src": "994:122:8",
                    "text": " @dev See {ERC721-_update}.\n Requirements:\n - the contract must not be paused."
                  },
                  "id": 1845,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1833,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1832,
                        "name": "whenNotPaused",
                        "nameLocations": [
                          "1237:13:8"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2394,
                        "src": "1237:13:8"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1237:13:8"
                    }
                  ],
                  "name": "_update",
                  "nameLocation": "1130:7:8",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1831,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1228:8:8"
                  },
                  "parameters": {
                    "id": 1830,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1825,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1155:2:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1845,
                        "src": "1147:10:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1824,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1147:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1827,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1175:7:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1845,
                        "src": "1167:15:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1826,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1167:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1829,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "1200:4:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1845,
                        "src": "1192:12:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1828,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1192:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1137:73:8"
                  },
                  "returnParameters": {
                    "id": 1836,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1835,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1845,
                        "src": "1260:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1834,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1260:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1259:9:8"
                  },
                  "scope": 1846,
                  "src": "1121:204:8",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1847,
              "src": "935:392:8",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256,
                2383,
                2386
              ],
              "usedEvents": [
                1277,
                1286,
                1295,
                2375,
                2380
              ]
            }
          ],
          "src": "126:1202:8"
        },
        "id": 8
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol",
          "exportedSymbols": {
            "ERC2981": [
              2279
            ],
            "ERC721": [
              1261
            ],
            "ERC721Royalty": [
              1875
            ]
          },
          "id": 1876,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1848,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "125:24:9"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "../ERC721.sol",
              "id": 1850,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1876,
              "sourceUnit": 1262,
              "src": "151:37:9",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1849,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "159:6:9",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/common/ERC2981.sol",
              "file": "../../common/ERC2981.sol",
              "id": 1852,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1876,
              "sourceUnit": 2280,
              "src": "189:49:9",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1851,
                    "name": "ERC2981",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2279,
                    "src": "197:7:9",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1854,
                    "name": "ERC2981",
                    "nameLocations": [
                      "984:7:9"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2279,
                    "src": "984:7:9"
                  },
                  "id": 1855,
                  "nodeType": "InheritanceSpecifier",
                  "src": "984:7:9"
                },
                {
                  "baseName": {
                    "id": 1856,
                    "name": "ERC721",
                    "nameLocations": [
                      "993:6:9"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1261,
                    "src": "993:6:9"
                  },
                  "id": 1857,
                  "nodeType": "InheritanceSpecifier",
                  "src": "993:6:9"
                }
              ],
              "canonicalName": "ERC721Royalty",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1853,
                "nodeType": "StructuredDocumentation",
                "src": "240:708:9",
                "text": " @dev Extension of ERC-721 with the ERC-2981 NFT Royalty Standard, a standardized way to retrieve royalty payment\n information.\n Royalty information can be specified globally for all token ids via {ERC2981-_setDefaultRoyalty}, and/or individually\n for specific token ids via {ERC2981-_setTokenRoyalty}. The latter takes precedence over the first.\n IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See\n https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to\n voluntarily pay royalties together with sales, but note that this standard is not yet widely supported."
              },
              "fullyImplemented": true,
              "id": 1875,
              "linearizedBaseContracts": [
                1875,
                1261,
                257,
                1935,
                1378,
                2279,
                5077,
                167,
                5089,
                2309
              ],
              "name": "ERC721Royalty",
              "nameLocation": "967:13:9",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    405,
                    2089
                  ],
                  "body": {
                    "id": 1873,
                    "nodeType": "Block",
                    "src": "1175:60:9",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1870,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1860,
                              "src": "1216:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            ],
                            "expression": {
                              "id": 1868,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1192:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721Royalty_$1875_$",
                                "typeString": "type(contract super ERC721Royalty)"
                              }
                            },
                            "id": 1869,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1198:17:9",
                            "memberName": "supportsInterface",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 405,
                            "src": "1192:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                              "typeString": "function (bytes4) view returns (bool)"
                            }
                          },
                          "id": 1871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1192:36:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1867,
                        "id": 1872,
                        "nodeType": "Return",
                        "src": "1185:43:9"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1858,
                    "nodeType": "StructuredDocumentation",
                    "src": "1006:56:9",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 1874,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "1076:17:9",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1864,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 1862,
                        "name": "ERC721",
                        "nameLocations": [
                          "1143:6:9"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "1143:6:9"
                      },
                      {
                        "id": 1863,
                        "name": "ERC2981",
                        "nameLocations": [
                          "1151:7:9"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2279,
                        "src": "1151:7:9"
                      }
                    ],
                    "src": "1134:25:9"
                  },
                  "parameters": {
                    "id": 1861,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1860,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "1101:11:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1874,
                        "src": "1094:18:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1859,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1094:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1093:20:9"
                  },
                  "returnParameters": {
                    "id": 1867,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1866,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1874,
                        "src": "1169:4:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1865,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1169:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1168:6:9"
                  },
                  "scope": 1875,
                  "src": "1067:168:9",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 1876,
              "src": "949:288:9",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256,
                2044,
                2049,
                2058,
                2065
              ],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "125:1113:9"
        },
        "id": 9
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
          "exportedSymbols": {
            "IERC721": [
              1378
            ],
            "IERC721Enumerable": [
              1907
            ]
          },
          "id": 1908,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1877,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "129:24:10"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "../IERC721.sol",
              "id": 1879,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1908,
              "sourceUnit": 1379,
              "src": "155:39:10",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1878,
                    "name": "IERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1378,
                    "src": "163:7:10",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1881,
                    "name": "IERC721",
                    "nameLocations": [
                      "364:7:10"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1378,
                    "src": "364:7:10"
                  },
                  "id": 1882,
                  "nodeType": "InheritanceSpecifier",
                  "src": "364:7:10"
                }
              ],
              "canonicalName": "IERC721Enumerable",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1880,
                "nodeType": "StructuredDocumentation",
                "src": "196:136:10",
                "text": " @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
              },
              "fullyImplemented": false,
              "id": 1907,
              "linearizedBaseContracts": [
                1907,
                1378,
                5089
              ],
              "name": "IERC721Enumerable",
              "nameLocation": "343:17:10",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1883,
                    "nodeType": "StructuredDocumentation",
                    "src": "378:82:10",
                    "text": " @dev Returns the total amount of tokens stored by the contract."
                  },
                  "functionSelector": "18160ddd",
                  "id": 1888,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "474:11:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1884,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "485:2:10"
                  },
                  "returnParameters": {
                    "id": 1887,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1886,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1888,
                        "src": "511:7:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1885,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "511:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "510:9:10"
                  },
                  "scope": 1907,
                  "src": "465:55:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1889,
                    "nodeType": "StructuredDocumentation",
                    "src": "526:171:10",
                    "text": " @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n Use along with {balanceOf} to enumerate all of ``owner``'s tokens."
                  },
                  "functionSelector": "2f745c59",
                  "id": 1898,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenOfOwnerByIndex",
                  "nameLocation": "711:19:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1894,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1891,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "739:5:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 1898,
                        "src": "731:13:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1890,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "731:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1893,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "754:5:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 1898,
                        "src": "746:13:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1892,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "746:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "730:30:10"
                  },
                  "returnParameters": {
                    "id": 1897,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1896,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1898,
                        "src": "784:7:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1895,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "784:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "783:9:10"
                  },
                  "scope": 1907,
                  "src": "702:91:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1899,
                    "nodeType": "StructuredDocumentation",
                    "src": "799:164:10",
                    "text": " @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n Use along with {totalSupply} to enumerate all tokens."
                  },
                  "functionSelector": "4f6ccce7",
                  "id": 1906,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenByIndex",
                  "nameLocation": "977:12:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1902,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1901,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "998:5:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 1906,
                        "src": "990:13:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1900,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "990:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "989:15:10"
                  },
                  "returnParameters": {
                    "id": 1905,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1904,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1906,
                        "src": "1028:7:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1903,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1028:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1027:9:10"
                  },
                  "scope": 1907,
                  "src": "968:69:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1908,
              "src": "333:706:10",
              "usedErrors": [],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "129:911:10"
        },
        "id": 10
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
          "exportedSymbols": {
            "IERC721": [
              1378
            ],
            "IERC721Metadata": [
              1935
            ]
          },
          "id": 1936,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1909,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "127:24:11"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "../IERC721.sol",
              "id": 1911,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1936,
              "sourceUnit": 1379,
              "src": "153:39:11",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1910,
                    "name": "IERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1378,
                    "src": "161:7:11",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1913,
                    "name": "IERC721",
                    "nameLocations": [
                      "357:7:11"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1378,
                    "src": "357:7:11"
                  },
                  "id": 1914,
                  "nodeType": "InheritanceSpecifier",
                  "src": "357:7:11"
                }
              ],
              "canonicalName": "IERC721Metadata",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1912,
                "nodeType": "StructuredDocumentation",
                "src": "194:133:11",
                "text": " @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
              },
              "fullyImplemented": false,
              "id": 1935,
              "linearizedBaseContracts": [
                1935,
                1378,
                5089
              ],
              "name": "IERC721Metadata",
              "nameLocation": "338:15:11",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1915,
                    "nodeType": "StructuredDocumentation",
                    "src": "371:58:11",
                    "text": " @dev Returns the token collection name."
                  },
                  "functionSelector": "06fdde03",
                  "id": 1920,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "443:4:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1916,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "447:2:11"
                  },
                  "returnParameters": {
                    "id": 1919,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1918,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1920,
                        "src": "473:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1917,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "473:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "472:15:11"
                  },
                  "scope": 1935,
                  "src": "434:54:11",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1921,
                    "nodeType": "StructuredDocumentation",
                    "src": "494:60:11",
                    "text": " @dev Returns the token collection symbol."
                  },
                  "functionSelector": "95d89b41",
                  "id": 1926,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "568:6:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1922,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "574:2:11"
                  },
                  "returnParameters": {
                    "id": 1925,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1924,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1926,
                        "src": "600:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1923,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "600:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "599:15:11"
                  },
                  "scope": 1935,
                  "src": "559:56:11",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1927,
                    "nodeType": "StructuredDocumentation",
                    "src": "621:90:11",
                    "text": " @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 1934,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "725:8:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1929,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "742:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 1934,
                        "src": "734:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1928,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "734:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "733:17:11"
                  },
                  "returnParameters": {
                    "id": 1933,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1932,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1934,
                        "src": "774:13:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1931,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "774:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "773:15:11"
                  },
                  "scope": 1935,
                  "src": "716:73:11",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1936,
              "src": "328:463:11",
              "usedErrors": [],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "127:665:11"
        },
        "id": 11
      },
      "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol",
          "exportedSymbols": {
            "ERC721Utils": [
              2012
            ],
            "IERC721Errors": [
              257
            ],
            "IERC721Receiver": [
              1396
            ]
          },
          "id": 2013,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1937,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "118:24:12"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
              "file": "../IERC721Receiver.sol",
              "id": 1939,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 1397,
              "src": "144:55:12",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1938,
                    "name": "IERC721Receiver",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1396,
                    "src": "152:15:12",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
              "file": "../../../interfaces/draft-IERC6093.sol",
              "id": 1941,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 305,
              "src": "200:69:12",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1940,
                    "name": "IERC721Errors",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 257,
                    "src": "208:13:12",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "ERC721Utils",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1942,
                "nodeType": "StructuredDocumentation",
                "src": "271:159:12",
                "text": " @dev Library that provide common ERC-721 utility functions.\n See https://eips.ethereum.org/EIPS/eip-721[ERC-721].\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 2012,
              "linearizedBaseContracts": [
                2012
              ],
              "name": "ERC721Utils",
              "nameLocation": "439:11:12",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2010,
                    "nodeType": "Block",
                    "src": "1159:758:12",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1960,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 1956,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1949,
                                "src": "1173:2:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1957,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1176:4:12",
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "1173:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1181:6:12",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1173:14:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1959,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1190:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1173:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2009,
                        "nodeType": "IfStatement",
                        "src": "1169:742:12",
                        "trueBody": {
                          "id": 2008,
                          "nodeType": "Block",
                          "src": "1193:718:12",
                          "statements": [
                            {
                              "clauses": [
                                {
                                  "block": {
                                    "id": 1986,
                                    "nodeType": "Block",
                                    "src": "1303:214:12",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          "id": 1977,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1973,
                                            "name": "retval",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1971,
                                            "src": "1325:6:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "!=",
                                          "rightExpression": {
                                            "expression": {
                                              "expression": {
                                                "id": 1974,
                                                "name": "IERC721Receiver",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1396,
                                                "src": "1335:15:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1396_$",
                                                  "typeString": "type(contract IERC721Receiver)"
                                                }
                                              },
                                              "id": 1975,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberLocation": "1351:16:12",
                                              "memberName": "onERC721Received",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 1395,
                                              "src": "1335:32:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                                "typeString": "function IERC721Receiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
                                              }
                                            },
                                            "id": 1976,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "1368:8:12",
                                            "memberName": "selector",
                                            "nodeType": "MemberAccess",
                                            "src": "1335:41:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "src": "1325:51:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "id": 1985,
                                        "nodeType": "IfStatement",
                                        "src": "1321:182:12",
                                        "trueBody": {
                                          "id": 1984,
                                          "nodeType": "Block",
                                          "src": "1378:125:12",
                                          "statements": [
                                            {
                                              "errorCall": {
                                                "arguments": [
                                                  {
                                                    "id": 1981,
                                                    "name": "to",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1949,
                                                    "src": "1481:2:12",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 1978,
                                                    "name": "IERC721Errors",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 257,
                                                    "src": "1445:13:12",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_IERC721Errors_$257_$",
                                                      "typeString": "type(contract IERC721Errors)"
                                                    }
                                                  },
                                                  "id": 1980,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "1459:21:12",
                                                  "memberName": "ERC721InvalidReceiver",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 239,
                                                  "src": "1445:35:12",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                                    "typeString": "function (address) pure"
                                                  }
                                                },
                                                "id": 1982,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1445:39:12",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$__$",
                                                  "typeString": "tuple()"
                                                }
                                              },
                                              "id": 1983,
                                              "nodeType": "RevertStatement",
                                              "src": "1438:46:12"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 1987,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 1972,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 1971,
                                        "mutability": "mutable",
                                        "name": "retval",
                                        "nameLocation": "1295:6:12",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 1987,
                                        "src": "1288:13:12",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        "typeName": {
                                          "id": 1970,
                                          "name": "bytes4",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1288:6:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "1287:15:12"
                                  },
                                  "src": "1279:238:12"
                                },
                                {
                                  "block": {
                                    "id": 2005,
                                    "nodeType": "Block",
                                    "src": "1546:355:12",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 1994,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 1991,
                                              "name": "reason",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1989,
                                              "src": "1568:6:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 1992,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "1575:6:12",
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "1568:13:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "hexValue": "30",
                                            "id": 1993,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1585:1:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "src": "1568:18:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "id": 2003,
                                          "nodeType": "Block",
                                          "src": "1736:151:12",
                                          "statements": [
                                            {
                                              "AST": {
                                                "nativeSrc": "1783:86:12",
                                                "nodeType": "YulBlock",
                                                "src": "1783:86:12",
                                                "statements": [
                                                  {
                                                    "expression": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "kind": "number",
                                                              "nativeSrc": "1820:2:12",
                                                              "nodeType": "YulLiteral",
                                                              "src": "1820:2:12",
                                                              "type": "",
                                                              "value": "32"
                                                            },
                                                            {
                                                              "name": "reason",
                                                              "nativeSrc": "1824:6:12",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1824:6:12"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "add",
                                                            "nativeSrc": "1816:3:12",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1816:3:12"
                                                          },
                                                          "nativeSrc": "1816:15:12",
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "1816:15:12"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "reason",
                                                              "nativeSrc": "1839:6:12",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1839:6:12"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "mload",
                                                            "nativeSrc": "1833:5:12",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1833:5:12"
                                                          },
                                                          "nativeSrc": "1833:13:12",
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "1833:13:12"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "revert",
                                                        "nativeSrc": "1809:6:12",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1809:6:12"
                                                      },
                                                      "nativeSrc": "1809:38:12",
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "1809:38:12"
                                                    },
                                                    "nativeSrc": "1809:38:12",
                                                    "nodeType": "YulExpressionStatement",
                                                    "src": "1809:38:12"
                                                  }
                                                ]
                                              },
                                              "evmVersion": "paris",
                                              "externalReferences": [
                                                {
                                                  "declaration": 1989,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "1824:6:12",
                                                  "valueSize": 1
                                                },
                                                {
                                                  "declaration": 1989,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "1839:6:12",
                                                  "valueSize": 1
                                                }
                                              ],
                                              "flags": [
                                                "memory-safe"
                                              ],
                                              "id": 2002,
                                              "nodeType": "InlineAssembly",
                                              "src": "1758:111:12"
                                            }
                                          ]
                                        },
                                        "id": 2004,
                                        "nodeType": "IfStatement",
                                        "src": "1564:323:12",
                                        "trueBody": {
                                          "id": 2001,
                                          "nodeType": "Block",
                                          "src": "1588:142:12",
                                          "statements": [
                                            {
                                              "errorCall": {
                                                "arguments": [
                                                  {
                                                    "id": 1998,
                                                    "name": "to",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1949,
                                                    "src": "1708:2:12",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 1995,
                                                    "name": "IERC721Errors",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 257,
                                                    "src": "1672:13:12",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_IERC721Errors_$257_$",
                                                      "typeString": "type(contract IERC721Errors)"
                                                    }
                                                  },
                                                  "id": 1997,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "1686:21:12",
                                                  "memberName": "ERC721InvalidReceiver",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 239,
                                                  "src": "1672:35:12",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                                    "typeString": "function (address) pure"
                                                  }
                                                },
                                                "id": 1999,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1672:39:12",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$__$",
                                                  "typeString": "tuple()"
                                                }
                                              },
                                              "id": 2000,
                                              "nodeType": "RevertStatement",
                                              "src": "1665:46:12"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 2006,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 1990,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 1989,
                                        "mutability": "mutable",
                                        "name": "reason",
                                        "nameLocation": "1538:6:12",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2006,
                                        "src": "1525:19:12",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes"
                                        },
                                        "typeName": {
                                          "id": 1988,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1525:5:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "1524:21:12"
                                  },
                                  "src": "1518:383:12"
                                }
                              ],
                              "externalCall": {
                                "arguments": [
                                  {
                                    "id": 1965,
                                    "name": "operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1945,
                                    "src": "1248:8:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1966,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1947,
                                    "src": "1258:4:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1967,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1951,
                                    "src": "1264:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 1968,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1953,
                                    "src": "1273:4:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 1962,
                                        "name": "to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1949,
                                        "src": "1227:2:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1961,
                                      "name": "IERC721Receiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1396,
                                      "src": "1211:15:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$1396_$",
                                        "typeString": "type(contract IERC721Receiver)"
                                      }
                                    },
                                    "id": 1963,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1211:19:12",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC721Receiver_$1396",
                                      "typeString": "contract IERC721Receiver"
                                    }
                                  },
                                  "id": 1964,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "1231:16:12",
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1395,
                                  "src": "1211:36:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 1969,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1211:67:12",
                                "tryCall": true,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "id": 2007,
                              "nodeType": "TryStatement",
                              "src": "1207:694:12"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1943,
                    "nodeType": "StructuredDocumentation",
                    "src": "457:531:12",
                    "text": " @dev Performs an acceptance check for the provided `operator` by calling {IERC721Receiver-onERC721Received}\n on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept\n the transfer."
                  },
                  "id": 2011,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkOnERC721Received",
                  "nameLocation": "1002:21:12",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1954,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1945,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "1041:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2011,
                        "src": "1033:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1944,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1033:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1947,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1067:4:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2011,
                        "src": "1059:12:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1946,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1059:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1949,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1089:2:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2011,
                        "src": "1081:10:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1948,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1081:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1951,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1109:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2011,
                        "src": "1101:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1950,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1101:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1953,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "1139:4:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2011,
                        "src": "1126:17:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1952,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1126:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1023:126:12"
                  },
                  "returnParameters": {
                    "id": 1955,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1159:0:12"
                  },
                  "scope": 2012,
                  "src": "993:924:12",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2013,
              "src": "431:1488:12",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "118:1802:12"
        },
        "id": 12
      },
      "@openzeppelin/contracts/token/common/ERC2981.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/common/ERC2981.sol",
          "exportedSymbols": {
            "ERC165": [
              5077
            ],
            "ERC2981": [
              2279
            ],
            "IERC165": [
              5089
            ],
            "IERC2981": [
              167
            ]
          },
          "id": 2280,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2014,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "108:24:13"
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/IERC2981.sol",
              "file": "../../interfaces/IERC2981.sol",
              "id": 2016,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2280,
              "sourceUnit": 168,
              "src": "134:55:13",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2015,
                    "name": "IERC2981",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 167,
                    "src": "142:8:13",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
              "file": "../../utils/introspection/ERC165.sol",
              "id": 2019,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2280,
              "sourceUnit": 5078,
              "src": "190:69:13",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2017,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5089,
                    "src": "198:7:13",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                },
                {
                  "foreign": {
                    "id": 2018,
                    "name": "ERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5077,
                    "src": "207:6:13",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2021,
                    "name": "IERC2981",
                    "nameLocations": [
                      "1135:8:13"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 167,
                    "src": "1135:8:13"
                  },
                  "id": 2022,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1135:8:13"
                },
                {
                  "baseName": {
                    "id": 2023,
                    "name": "ERC165",
                    "nameLocations": [
                      "1145:6:13"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5077,
                    "src": "1145:6:13"
                  },
                  "id": 2024,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1145:6:13"
                }
              ],
              "canonicalName": "ERC2981",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2020,
                "nodeType": "StructuredDocumentation",
                "src": "261:844:13",
                "text": " @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.\n Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for\n specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.\n Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the\n fee is specified in basis points by default.\n IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See\n https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to\n voluntarily pay royalties together with sales, but note that this standard is not yet widely supported."
              },
              "fullyImplemented": true,
              "id": 2279,
              "linearizedBaseContracts": [
                2279,
                5077,
                167,
                5089
              ],
              "name": "ERC2981",
              "nameLocation": "1124:7:13",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "ERC2981.RoyaltyInfo",
                  "id": 2029,
                  "members": [
                    {
                      "constant": false,
                      "id": 2026,
                      "mutability": "mutable",
                      "name": "receiver",
                      "nameLocation": "1195:8:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 2029,
                      "src": "1187:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2025,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1187:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2028,
                      "mutability": "mutable",
                      "name": "royaltyFraction",
                      "nameLocation": "1220:15:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 2029,
                      "src": "1213:22:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 2027,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "1213:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "RoyaltyInfo",
                  "nameLocation": "1165:11:13",
                  "nodeType": "StructDefinition",
                  "scope": 2279,
                  "src": "1158:84:13",
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 2032,
                  "mutability": "mutable",
                  "name": "_defaultRoyaltyInfo",
                  "nameLocation": "1268:19:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2279,
                  "src": "1248:39:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                    "typeString": "struct ERC2981.RoyaltyInfo"
                  },
                  "typeName": {
                    "id": 2031,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2030,
                      "name": "RoyaltyInfo",
                      "nameLocations": [
                        "1248:11:13"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2029,
                      "src": "1248:11:13"
                    },
                    "referencedDeclaration": 2029,
                    "src": "1248:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage_ptr",
                      "typeString": "struct ERC2981.RoyaltyInfo"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 2037,
                  "mutability": "mutable",
                  "name": "_tokenRoyaltyInfo",
                  "nameLocation": "1341:17:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2279,
                  "src": "1293:65:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2029_storage_$",
                    "typeString": "mapping(uint256 => struct ERC2981.RoyaltyInfo)"
                  },
                  "typeName": {
                    "id": 2036,
                    "keyName": "tokenId",
                    "keyNameLocation": "1309:7:13",
                    "keyType": {
                      "id": 2033,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1301:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1293:39:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2029_storage_$",
                      "typeString": "mapping(uint256 => struct ERC2981.RoyaltyInfo)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 2035,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 2034,
                        "name": "RoyaltyInfo",
                        "nameLocations": [
                          "1320:11:13"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2029,
                        "src": "1320:11:13"
                      },
                      "referencedDeclaration": 2029,
                      "src": "1320:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage_ptr",
                        "typeString": "struct ERC2981.RoyaltyInfo"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 2038,
                    "nodeType": "StructuredDocumentation",
                    "src": "1365:96:13",
                    "text": " @dev The default royalty set is invalid (eg. (numerator / denominator) >= 1)."
                  },
                  "errorSelector": "6f483d09",
                  "id": 2044,
                  "name": "ERC2981InvalidDefaultRoyalty",
                  "nameLocation": "1472:28:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2043,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2040,
                        "mutability": "mutable",
                        "name": "numerator",
                        "nameLocation": "1509:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2044,
                        "src": "1501:17:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2039,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1501:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2042,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "1528:11:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2044,
                        "src": "1520:19:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2041,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1520:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1500:40:13"
                  },
                  "src": "1466:75:13"
                },
                {
                  "documentation": {
                    "id": 2045,
                    "nodeType": "StructuredDocumentation",
                    "src": "1547:64:13",
                    "text": " @dev The default royalty receiver is invalid."
                  },
                  "errorSelector": "b6d9900a",
                  "id": 2049,
                  "name": "ERC2981InvalidDefaultRoyaltyReceiver",
                  "nameLocation": "1622:36:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2048,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2047,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "1667:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2049,
                        "src": "1659:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2046,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1659:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1658:18:13"
                  },
                  "src": "1616:61:13"
                },
                {
                  "documentation": {
                    "id": 2050,
                    "nodeType": "StructuredDocumentation",
                    "src": "1683:113:13",
                    "text": " @dev The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1)."
                  },
                  "errorSelector": "dfd1fc1b",
                  "id": 2058,
                  "name": "ERC2981InvalidTokenRoyalty",
                  "nameLocation": "1807:26:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2057,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2052,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1842:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2058,
                        "src": "1834:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2051,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1834:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2054,
                        "mutability": "mutable",
                        "name": "numerator",
                        "nameLocation": "1859:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2058,
                        "src": "1851:17:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2053,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1851:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2056,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "1878:11:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2058,
                        "src": "1870:19:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2055,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1870:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1833:57:13"
                  },
                  "src": "1801:90:13"
                },
                {
                  "documentation": {
                    "id": 2059,
                    "nodeType": "StructuredDocumentation",
                    "src": "1897:70:13",
                    "text": " @dev The royalty receiver for `tokenId` is invalid."
                  },
                  "errorSelector": "969f0852",
                  "id": 2065,
                  "name": "ERC2981InvalidTokenRoyaltyReceiver",
                  "nameLocation": "1978:34:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2064,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2061,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2021:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2065,
                        "src": "2013:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2060,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2013:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2063,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "2038:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2065,
                        "src": "2030:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2062,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2030:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2012:35:13"
                  },
                  "src": "1972:76:13"
                },
                {
                  "baseFunctions": [
                    5076,
                    5088
                  ],
                  "body": {
                    "id": 2088,
                    "nodeType": "Block",
                    "src": "2223:105:13",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 2081,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2076,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2068,
                              "src": "2240:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2078,
                                    "name": "IERC2981",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 167,
                                    "src": "2260:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC2981_$167_$",
                                      "typeString": "type(contract IERC2981)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_contract$_IERC2981_$167_$",
                                      "typeString": "type(contract IERC2981)"
                                    }
                                  ],
                                  "id": 2077,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "2255:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 2079,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2255:14:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_contract$_IERC2981_$167",
                                  "typeString": "type(contract IERC2981)"
                                }
                              },
                              "id": 2080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "2270:11:13",
                              "memberName": "interfaceId",
                              "nodeType": "MemberAccess",
                              "src": "2255:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "2240:41:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 2084,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2068,
                                "src": "2309:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 2082,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "2285:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_ERC2981_$2279_$",
                                  "typeString": "type(contract super ERC2981)"
                                }
                              },
                              "id": 2083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2291:17:13",
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5076,
                              "src": "2285:23:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 2085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2285:36:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2240:81:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2075,
                        "id": 2087,
                        "nodeType": "Return",
                        "src": "2233:88:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2066,
                    "nodeType": "StructuredDocumentation",
                    "src": "2054:56:13",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 2089,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "2124:17:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2072,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 2070,
                        "name": "IERC165",
                        "nameLocations": [
                          "2191:7:13"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5089,
                        "src": "2191:7:13"
                      },
                      {
                        "id": 2071,
                        "name": "ERC165",
                        "nameLocations": [
                          "2200:6:13"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5077,
                        "src": "2200:6:13"
                      }
                    ],
                    "src": "2182:25:13"
                  },
                  "parameters": {
                    "id": 2069,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2068,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "2149:11:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "2142:18:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 2067,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "2142:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2141:20:13"
                  },
                  "returnParameters": {
                    "id": 2075,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2074,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "2217:4:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2073,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2217:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2216:6:13"
                  },
                  "scope": 2279,
                  "src": "2115:213:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    166
                  ],
                  "body": {
                    "id": 2150,
                    "nodeType": "Block",
                    "src": "2520:515:13",
                    "statements": [
                      {
                        "assignments": [
                          2103
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2103,
                            "mutability": "mutable",
                            "name": "_royaltyInfo",
                            "nameLocation": "2550:12:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2150,
                            "src": "2530:32:13",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage_ptr",
                              "typeString": "struct ERC2981.RoyaltyInfo"
                            },
                            "typeName": {
                              "id": 2102,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2101,
                                "name": "RoyaltyInfo",
                                "nameLocations": [
                                  "2530:11:13"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2029,
                                "src": "2530:11:13"
                              },
                              "referencedDeclaration": 2029,
                              "src": "2530:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage_ptr",
                                "typeString": "struct ERC2981.RoyaltyInfo"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2107,
                        "initialValue": {
                          "baseExpression": {
                            "id": 2104,
                            "name": "_tokenRoyaltyInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2037,
                            "src": "2565:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2029_storage_$",
                              "typeString": "mapping(uint256 => struct ERC2981.RoyaltyInfo storage ref)"
                            }
                          },
                          "id": 2106,
                          "indexExpression": {
                            "id": 2105,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2092,
                            "src": "2583:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2565:26:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                            "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2530:61:13"
                      },
                      {
                        "assignments": [
                          2109
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2109,
                            "mutability": "mutable",
                            "name": "royaltyReceiver",
                            "nameLocation": "2609:15:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2150,
                            "src": "2601:23:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 2108,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2601:7:13",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2112,
                        "initialValue": {
                          "expression": {
                            "id": 2110,
                            "name": "_royaltyInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2103,
                            "src": "2627:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage_ptr",
                              "typeString": "struct ERC2981.RoyaltyInfo storage pointer"
                            }
                          },
                          "id": 2111,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2640:8:13",
                          "memberName": "receiver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2026,
                          "src": "2627:21:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2601:47:13"
                      },
                      {
                        "assignments": [
                          2114
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2114,
                            "mutability": "mutable",
                            "name": "royaltyFraction",
                            "nameLocation": "2665:15:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2150,
                            "src": "2658:22:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            },
                            "typeName": {
                              "id": 2113,
                              "name": "uint96",
                              "nodeType": "ElementaryTypeName",
                              "src": "2658:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2117,
                        "initialValue": {
                          "expression": {
                            "id": 2115,
                            "name": "_royaltyInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2103,
                            "src": "2683:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage_ptr",
                              "typeString": "struct ERC2981.RoyaltyInfo storage pointer"
                            }
                          },
                          "id": 2116,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2696:15:13",
                          "memberName": "royaltyFraction",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2028,
                          "src": "2683:28:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2658:53:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2118,
                            "name": "royaltyReceiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2109,
                            "src": "2726:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2121,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2753:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 2120,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2745:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2119,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2745:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2745:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2726:29:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2135,
                        "nodeType": "IfStatement",
                        "src": "2722:173:13",
                        "trueBody": {
                          "id": 2134,
                          "nodeType": "Block",
                          "src": "2757:138:13",
                          "statements": [
                            {
                              "expression": {
                                "id": 2127,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2124,
                                  "name": "royaltyReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2109,
                                  "src": "2771:15:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 2125,
                                    "name": "_defaultRoyaltyInfo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2032,
                                    "src": "2789:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                                      "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                                    }
                                  },
                                  "id": 2126,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2809:8:13",
                                  "memberName": "receiver",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2026,
                                  "src": "2789:28:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2771:46:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 2128,
                              "nodeType": "ExpressionStatement",
                              "src": "2771:46:13"
                            },
                            {
                              "expression": {
                                "id": 2132,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2129,
                                  "name": "royaltyFraction",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2114,
                                  "src": "2831:15:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 2130,
                                    "name": "_defaultRoyaltyInfo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2032,
                                    "src": "2849:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                                      "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                                    }
                                  },
                                  "id": 2131,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2869:15:13",
                                  "memberName": "royaltyFraction",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2028,
                                  "src": "2849:35:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  }
                                },
                                "src": "2831:53:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              },
                              "id": 2133,
                              "nodeType": "ExpressionStatement",
                              "src": "2831:53:13"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          2137
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2137,
                            "mutability": "mutable",
                            "name": "royaltyAmount",
                            "nameLocation": "2913:13:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2150,
                            "src": "2905:21:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2136,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2905:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2145,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2140,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2138,
                                  "name": "salePrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2094,
                                  "src": "2930:9:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 2139,
                                  "name": "royaltyFraction",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2114,
                                  "src": "2942:15:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  }
                                },
                                "src": "2930:27:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2141,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2929:29:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2142,
                              "name": "_feeDenominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2160,
                              "src": "2961:15:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint96_$",
                                "typeString": "function () pure returns (uint96)"
                              }
                            },
                            "id": 2143,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2961:17:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "2929:49:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2905:73:13"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "id": 2146,
                              "name": "royaltyReceiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2109,
                              "src": "2997:15:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2147,
                              "name": "royaltyAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2137,
                              "src": "3014:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 2148,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2996:32:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                            "typeString": "tuple(address,uint256)"
                          }
                        },
                        "functionReturnParameters": 2100,
                        "id": 2149,
                        "nodeType": "Return",
                        "src": "2989:39:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2090,
                    "nodeType": "StructuredDocumentation",
                    "src": "2334:39:13",
                    "text": " @inheritdoc IERC2981"
                  },
                  "functionSelector": "2a55205a",
                  "id": 2151,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "royaltyInfo",
                  "nameLocation": "2387:11:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2095,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2092,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2416:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2151,
                        "src": "2408:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2091,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2408:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2094,
                        "mutability": "mutable",
                        "name": "salePrice",
                        "nameLocation": "2441:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2151,
                        "src": "2433:17:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2093,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2433:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2398:58:13"
                  },
                  "returnParameters": {
                    "id": 2100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2097,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "2494:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2151,
                        "src": "2486:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2096,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2486:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2099,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2512:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2151,
                        "src": "2504:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2098,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2504:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2485:34:13"
                  },
                  "scope": 2279,
                  "src": "2378:657:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2159,
                    "nodeType": "Block",
                    "src": "3376:29:13",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "3130303030",
                          "id": 2157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3393:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10000_by_1",
                            "typeString": "int_const 10000"
                          },
                          "value": "10000"
                        },
                        "functionReturnParameters": 2156,
                        "id": 2158,
                        "nodeType": "Return",
                        "src": "3386:12:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2152,
                    "nodeType": "StructuredDocumentation",
                    "src": "3041:264:13",
                    "text": " @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a\n fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an\n override."
                  },
                  "id": 2160,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_feeDenominator",
                  "nameLocation": "3319:15:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2153,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3334:2:13"
                  },
                  "returnParameters": {
                    "id": 2156,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2155,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2160,
                        "src": "3368:6:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        },
                        "typeName": {
                          "id": 2154,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "3368:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3367:8:13"
                  },
                  "scope": 2279,
                  "src": "3310:95:13",
                  "stateMutability": "pure",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2205,
                    "nodeType": "Block",
                    "src": "3750:423:13",
                    "statements": [
                      {
                        "assignments": [
                          2169
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2169,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nameLocation": "3768:11:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2205,
                            "src": "3760:19:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2168,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3760:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2172,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2170,
                            "name": "_feeDenominator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2160,
                            "src": "3782:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint96_$",
                              "typeString": "function () pure returns (uint96)"
                            }
                          },
                          "id": 2171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3782:17:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3760:39:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2173,
                            "name": "feeNumerator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2165,
                            "src": "3813:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 2174,
                            "name": "denominator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2169,
                            "src": "3828:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3813:26:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2182,
                        "nodeType": "IfStatement",
                        "src": "3809:173:13",
                        "trueBody": {
                          "id": 2181,
                          "nodeType": "Block",
                          "src": "3841:141:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 2177,
                                    "name": "feeNumerator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2165,
                                    "src": "3945:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint96",
                                      "typeString": "uint96"
                                    }
                                  },
                                  {
                                    "id": 2178,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2169,
                                    "src": "3959:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint96",
                                      "typeString": "uint96"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2176,
                                  "name": "ERC2981InvalidDefaultRoyalty",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2044,
                                  "src": "3916:28:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256) pure"
                                  }
                                },
                                "id": 2179,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3916:55:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2180,
                              "nodeType": "RevertStatement",
                              "src": "3909:62:13"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2183,
                            "name": "receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2163,
                            "src": "3995:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2186,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4015:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 2185,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4007:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2184,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4007:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4007:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3995:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2197,
                        "nodeType": "IfStatement",
                        "src": "3991:108:13",
                        "trueBody": {
                          "id": 2196,
                          "nodeType": "Block",
                          "src": "4019:80:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 2192,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4085:1:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 2191,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "4077:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 2190,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4077:7:13",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 2193,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4077:10:13",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2189,
                                  "name": "ERC2981InvalidDefaultRoyaltyReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2049,
                                  "src": "4040:36:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 2194,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4040:48:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2195,
                              "nodeType": "RevertStatement",
                              "src": "4033:55:13"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2198,
                            "name": "_defaultRoyaltyInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2032,
                            "src": "4109:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                              "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2200,
                                "name": "receiver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2163,
                                "src": "4143:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 2201,
                                "name": "feeNumerator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2165,
                                "src": "4153:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 2199,
                              "name": "RoyaltyInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "4131:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_RoyaltyInfo_$2029_storage_ptr_$",
                                "typeString": "type(struct ERC2981.RoyaltyInfo storage pointer)"
                              }
                            },
                            "id": 2202,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4131:35:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_memory_ptr",
                              "typeString": "struct ERC2981.RoyaltyInfo memory"
                            }
                          },
                          "src": "4109:57:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                            "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                          }
                        },
                        "id": 2204,
                        "nodeType": "ExpressionStatement",
                        "src": "4109:57:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2161,
                    "nodeType": "StructuredDocumentation",
                    "src": "3411:250:13",
                    "text": " @dev Sets the royalty information that all ids in this contract will default to.\n Requirements:\n - `receiver` cannot be the zero address.\n - `feeNumerator` cannot be greater than the fee denominator."
                  },
                  "id": 2206,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setDefaultRoyalty",
                  "nameLocation": "3675:18:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2166,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2163,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "3702:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2206,
                        "src": "3694:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3694:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2165,
                        "mutability": "mutable",
                        "name": "feeNumerator",
                        "nameLocation": "3719:12:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2206,
                        "src": "3712:19:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        },
                        "typeName": {
                          "id": 2164,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "3712:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3693:39:13"
                  },
                  "returnParameters": {
                    "id": 2167,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3750:0:13"
                  },
                  "scope": 2279,
                  "src": "3666:507:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2213,
                    "nodeType": "Block",
                    "src": "4294:43:13",
                    "statements": [
                      {
                        "expression": {
                          "id": 2211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "4304:26:13",
                          "subExpression": {
                            "id": 2210,
                            "name": "_defaultRoyaltyInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2032,
                            "src": "4311:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                              "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2212,
                        "nodeType": "ExpressionStatement",
                        "src": "4304:26:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2207,
                    "nodeType": "StructuredDocumentation",
                    "src": "4179:60:13",
                    "text": " @dev Removes default royalty information."
                  },
                  "id": 2214,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_deleteDefaultRoyalty",
                  "nameLocation": "4253:21:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2208,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4274:2:13"
                  },
                  "returnParameters": {
                    "id": 2209,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4294:0:13"
                  },
                  "scope": 2279,
                  "src": "4244:93:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2265,
                    "nodeType": "Block",
                    "src": "4706:444:13",
                    "statements": [
                      {
                        "assignments": [
                          2225
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2225,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nameLocation": "4724:11:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2265,
                            "src": "4716:19:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2224,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4716:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2228,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2226,
                            "name": "_feeDenominator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2160,
                            "src": "4738:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint96_$",
                              "typeString": "function () pure returns (uint96)"
                            }
                          },
                          "id": 2227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4738:17:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4716:39:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2229,
                            "name": "feeNumerator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2221,
                            "src": "4769:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 2230,
                            "name": "denominator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2225,
                            "src": "4784:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4769:26:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2239,
                        "nodeType": "IfStatement",
                        "src": "4765:180:13",
                        "trueBody": {
                          "id": 2238,
                          "nodeType": "Block",
                          "src": "4797:148:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 2233,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2217,
                                    "src": "4899:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 2234,
                                    "name": "feeNumerator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2221,
                                    "src": "4908:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint96",
                                      "typeString": "uint96"
                                    }
                                  },
                                  {
                                    "id": 2235,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2225,
                                    "src": "4922:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint96",
                                      "typeString": "uint96"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2232,
                                  "name": "ERC2981InvalidTokenRoyalty",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2058,
                                  "src": "4872:26:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 2236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4872:62:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2237,
                              "nodeType": "RevertStatement",
                              "src": "4865:69:13"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2240,
                            "name": "receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2219,
                            "src": "4958:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2243,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4978:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 2242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4970:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2241,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4970:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4970:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4958:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2255,
                        "nodeType": "IfStatement",
                        "src": "4954:115:13",
                        "trueBody": {
                          "id": 2254,
                          "nodeType": "Block",
                          "src": "4982:87:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 2247,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2217,
                                    "src": "5038:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 2250,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5055:1:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 2249,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5047:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 2248,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5047:7:13",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 2251,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5047:10:13",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2246,
                                  "name": "ERC2981InvalidTokenRoyaltyReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2065,
                                  "src": "5003:34:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_address_$returns$__$",
                                    "typeString": "function (uint256,address) pure"
                                  }
                                },
                                "id": 2252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5003:55:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2253,
                              "nodeType": "RevertStatement",
                              "src": "4996:62:13"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2256,
                              "name": "_tokenRoyaltyInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2037,
                              "src": "5079:17:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2029_storage_$",
                                "typeString": "mapping(uint256 => struct ERC2981.RoyaltyInfo storage ref)"
                              }
                            },
                            "id": 2258,
                            "indexExpression": {
                              "id": 2257,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "5097:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5079:26:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                              "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2260,
                                "name": "receiver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2219,
                                "src": "5120:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 2261,
                                "name": "feeNumerator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2221,
                                "src": "5130:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 2259,
                              "name": "RoyaltyInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "5108:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_RoyaltyInfo_$2029_storage_ptr_$",
                                "typeString": "type(struct ERC2981.RoyaltyInfo storage pointer)"
                              }
                            },
                            "id": 2262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5108:35:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_memory_ptr",
                              "typeString": "struct ERC2981.RoyaltyInfo memory"
                            }
                          },
                          "src": "5079:64:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                            "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                          }
                        },
                        "id": 2264,
                        "nodeType": "ExpressionStatement",
                        "src": "5079:64:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2215,
                    "nodeType": "StructuredDocumentation",
                    "src": "4343:259:13",
                    "text": " @dev Sets the royalty information for a specific token id, overriding the global default.\n Requirements:\n - `receiver` cannot be the zero address.\n - `feeNumerator` cannot be greater than the fee denominator."
                  },
                  "id": 2266,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setTokenRoyalty",
                  "nameLocation": "4616:16:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2217,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4641:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2266,
                        "src": "4633:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2216,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4633:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2219,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "4658:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2266,
                        "src": "4650:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2218,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4650:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2221,
                        "mutability": "mutable",
                        "name": "feeNumerator",
                        "nameLocation": "4675:12:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2266,
                        "src": "4668:19:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        },
                        "typeName": {
                          "id": 2220,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "4668:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4632:56:13"
                  },
                  "returnParameters": {
                    "id": 2223,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4706:0:13"
                  },
                  "scope": 2279,
                  "src": "4607:543:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2277,
                    "nodeType": "Block",
                    "src": "5318:50:13",
                    "statements": [
                      {
                        "expression": {
                          "id": 2275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "5328:33:13",
                          "subExpression": {
                            "baseExpression": {
                              "id": 2272,
                              "name": "_tokenRoyaltyInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2037,
                              "src": "5335:17:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2029_storage_$",
                                "typeString": "mapping(uint256 => struct ERC2981.RoyaltyInfo storage ref)"
                              }
                            },
                            "id": 2274,
                            "indexExpression": {
                              "id": 2273,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2269,
                              "src": "5353:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5335:26:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoyaltyInfo_$2029_storage",
                              "typeString": "struct ERC2981.RoyaltyInfo storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2276,
                        "nodeType": "ExpressionStatement",
                        "src": "5328:33:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2267,
                    "nodeType": "StructuredDocumentation",
                    "src": "5156:95:13",
                    "text": " @dev Resets royalty information for the token id back to the global default."
                  },
                  "id": 2278,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_resetTokenRoyalty",
                  "nameLocation": "5265:18:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2270,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2269,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "5292:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2278,
                        "src": "5284:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2268,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5284:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5283:17:13"
                  },
                  "returnParameters": {
                    "id": 2271,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5318:0:13"
                  },
                  "scope": 2279,
                  "src": "5256:112:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2280,
              "src": "1106:4264:13",
              "usedErrors": [
                2044,
                2049,
                2058,
                2065
              ],
              "usedEvents": []
            }
          ],
          "src": "108:5263:13"
        },
        "id": 13
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
          "exportedSymbols": {
            "Context": [
              2309
            ]
          },
          "id": 2310,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2281,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:24:14"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "canonicalName": "Context",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2282,
                "nodeType": "StructuredDocumentation",
                "src": "127:496:14",
                "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."
              },
              "fullyImplemented": true,
              "id": 2309,
              "linearizedBaseContracts": [
                2309
              ],
              "name": "Context",
              "nameLocation": "642:7:14",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2290,
                    "nodeType": "Block",
                    "src": "718:34:14",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 2287,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "735:3:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "739:6:14",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "735:10:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2286,
                        "id": 2289,
                        "nodeType": "Return",
                        "src": "728:17:14"
                      }
                    ]
                  },
                  "id": 2291,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nameLocation": "665:10:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2283,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "675:2:14"
                  },
                  "returnParameters": {
                    "id": 2286,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2285,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2291,
                        "src": "709:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2284,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "709:7:14",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "708:9:14"
                  },
                  "scope": 2309,
                  "src": "656:96:14",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2299,
                    "nodeType": "Block",
                    "src": "825:32:14",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 2296,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "842:3:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "846:4:14",
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "842:8:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 2295,
                        "id": 2298,
                        "nodeType": "Return",
                        "src": "835:15:14"
                      }
                    ]
                  },
                  "id": 2300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nameLocation": "767:8:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2292,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "775:2:14"
                  },
                  "returnParameters": {
                    "id": 2295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2294,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2300,
                        "src": "809:14:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2293,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "809:5:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "808:16:14"
                  },
                  "scope": 2309,
                  "src": "758:99:14",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2307,
                    "nodeType": "Block",
                    "src": "935:25:14",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 2305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "952:1:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2304,
                        "id": 2306,
                        "nodeType": "Return",
                        "src": "945:8:14"
                      }
                    ]
                  },
                  "id": 2308,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_contextSuffixLength",
                  "nameLocation": "872:20:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2301,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "892:2:14"
                  },
                  "returnParameters": {
                    "id": 2304,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2303,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2308,
                        "src": "926:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2302,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "926:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "925:9:14"
                  },
                  "scope": 2309,
                  "src": "863:97:14",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2310,
              "src": "624:338:14",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "101:862:14"
        },
        "id": 14
      },
      "@openzeppelin/contracts/utils/Panic.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Panic.sol",
          "exportedSymbols": {
            "Panic": [
              2361
            ]
          },
          "id": 2362,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2311,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "99:24:15"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Panic",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 2312,
                "nodeType": "StructuredDocumentation",
                "src": "125:489:15",
                "text": " @dev Helper library for emitting standardized panic codes.\n ```solidity\n contract Example {\n      using Panic for uint256;\n      // Use any of the declared internal constants\n      function foo() { Panic.GENERIC.panic(); }\n      // Alternatively\n      function foo() { Panic.panic(Panic.GENERIC); }\n }\n ```\n Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 2361,
              "linearizedBaseContracts": [
                2361
              ],
              "name": "Panic",
              "nameLocation": "665:5:15",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "documentation": {
                    "id": 2313,
                    "nodeType": "StructuredDocumentation",
                    "src": "677:36:15",
                    "text": "@dev generic / unspecified error"
                  },
                  "id": 2316,
                  "mutability": "constant",
                  "name": "GENERIC",
                  "nameLocation": "744:7:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "718:40:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "718:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783030",
                    "id": 2315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "754:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0x00"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2317,
                    "nodeType": "StructuredDocumentation",
                    "src": "764:37:15",
                    "text": "@dev used by the assert() builtin"
                  },
                  "id": 2320,
                  "mutability": "constant",
                  "name": "ASSERT",
                  "nameLocation": "832:6:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "806:39:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "806:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783031",
                    "id": 2319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "841:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "0x01"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2321,
                    "nodeType": "StructuredDocumentation",
                    "src": "851:41:15",
                    "text": "@dev arithmetic underflow or overflow"
                  },
                  "id": 2324,
                  "mutability": "constant",
                  "name": "UNDER_OVERFLOW",
                  "nameLocation": "923:14:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "897:47:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783131",
                    "id": 2323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "940:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_17_by_1",
                      "typeString": "int_const 17"
                    },
                    "value": "0x11"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2325,
                    "nodeType": "StructuredDocumentation",
                    "src": "950:35:15",
                    "text": "@dev division or modulo by zero"
                  },
                  "id": 2328,
                  "mutability": "constant",
                  "name": "DIVISION_BY_ZERO",
                  "nameLocation": "1016:16:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "990:49:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "990:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783132",
                    "id": 2327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1035:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18_by_1",
                      "typeString": "int_const 18"
                    },
                    "value": "0x12"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2329,
                    "nodeType": "StructuredDocumentation",
                    "src": "1045:30:15",
                    "text": "@dev enum conversion error"
                  },
                  "id": 2332,
                  "mutability": "constant",
                  "name": "ENUM_CONVERSION_ERROR",
                  "nameLocation": "1106:21:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "1080:54:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1080:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783231",
                    "id": 2331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1130:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_33_by_1",
                      "typeString": "int_const 33"
                    },
                    "value": "0x21"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2333,
                    "nodeType": "StructuredDocumentation",
                    "src": "1140:36:15",
                    "text": "@dev invalid encoding in storage"
                  },
                  "id": 2336,
                  "mutability": "constant",
                  "name": "STORAGE_ENCODING_ERROR",
                  "nameLocation": "1207:22:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "1181:55:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1181:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783232",
                    "id": 2335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1232:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_34_by_1",
                      "typeString": "int_const 34"
                    },
                    "value": "0x22"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2337,
                    "nodeType": "StructuredDocumentation",
                    "src": "1242:24:15",
                    "text": "@dev empty array pop"
                  },
                  "id": 2340,
                  "mutability": "constant",
                  "name": "EMPTY_ARRAY_POP",
                  "nameLocation": "1297:15:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "1271:48:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2338,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1271:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783331",
                    "id": 2339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1315:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_49_by_1",
                      "typeString": "int_const 49"
                    },
                    "value": "0x31"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2341,
                    "nodeType": "StructuredDocumentation",
                    "src": "1325:35:15",
                    "text": "@dev array out of bounds access"
                  },
                  "id": 2344,
                  "mutability": "constant",
                  "name": "ARRAY_OUT_OF_BOUNDS",
                  "nameLocation": "1391:19:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "1365:52:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1365:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783332",
                    "id": 2343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1413:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_50_by_1",
                      "typeString": "int_const 50"
                    },
                    "value": "0x32"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2345,
                    "nodeType": "StructuredDocumentation",
                    "src": "1423:65:15",
                    "text": "@dev resource error (too large allocation or too large array)"
                  },
                  "id": 2348,
                  "mutability": "constant",
                  "name": "RESOURCE_ERROR",
                  "nameLocation": "1519:14:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "1493:47:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2346,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783431",
                    "id": 2347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1536:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_65_by_1",
                      "typeString": "int_const 65"
                    },
                    "value": "0x41"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2349,
                    "nodeType": "StructuredDocumentation",
                    "src": "1546:42:15",
                    "text": "@dev calling invalid internal function"
                  },
                  "id": 2352,
                  "mutability": "constant",
                  "name": "INVALID_INTERNAL_FUNCTION",
                  "nameLocation": "1619:25:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 2361,
                  "src": "1593:58:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2350,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1593:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783531",
                    "id": 2351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1647:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_81_by_1",
                      "typeString": "int_const 81"
                    },
                    "value": "0x51"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2359,
                    "nodeType": "Block",
                    "src": "1819:151:15",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1854:110:15",
                          "nodeType": "YulBlock",
                          "src": "1854:110:15",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1875:4:15",
                                    "nodeType": "YulLiteral",
                                    "src": "1875:4:15",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1881:10:15",
                                    "nodeType": "YulLiteral",
                                    "src": "1881:10:15",
                                    "type": "",
                                    "value": "0x4e487b71"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "1868:6:15",
                                  "nodeType": "YulIdentifier",
                                  "src": "1868:6:15"
                                },
                                "nativeSrc": "1868:24:15",
                                "nodeType": "YulFunctionCall",
                                "src": "1868:24:15"
                              },
                              "nativeSrc": "1868:24:15",
                              "nodeType": "YulExpressionStatement",
                              "src": "1868:24:15"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1912:4:15",
                                    "nodeType": "YulLiteral",
                                    "src": "1912:4:15",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "code",
                                    "nativeSrc": "1918:4:15",
                                    "nodeType": "YulIdentifier",
                                    "src": "1918:4:15"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "1905:6:15",
                                  "nodeType": "YulIdentifier",
                                  "src": "1905:6:15"
                                },
                                "nativeSrc": "1905:18:15",
                                "nodeType": "YulFunctionCall",
                                "src": "1905:18:15"
                              },
                              "nativeSrc": "1905:18:15",
                              "nodeType": "YulExpressionStatement",
                              "src": "1905:18:15"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1943:4:15",
                                    "nodeType": "YulLiteral",
                                    "src": "1943:4:15",
                                    "type": "",
                                    "value": "0x1c"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1949:4:15",
                                    "nodeType": "YulLiteral",
                                    "src": "1949:4:15",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nativeSrc": "1936:6:15",
                                  "nodeType": "YulIdentifier",
                                  "src": "1936:6:15"
                                },
                                "nativeSrc": "1936:18:15",
                                "nodeType": "YulFunctionCall",
                                "src": "1936:18:15"
                              },
                              "nativeSrc": "1936:18:15",
                              "nodeType": "YulExpressionStatement",
                              "src": "1936:18:15"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 2355,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1918:4:15",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 2358,
                        "nodeType": "InlineAssembly",
                        "src": "1829:135:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2353,
                    "nodeType": "StructuredDocumentation",
                    "src": "1658:113:15",
                    "text": "@dev Reverts with a panic code. Recommended to use with\n the internal constants with predefined codes."
                  },
                  "id": 2360,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "panic",
                  "nameLocation": "1785:5:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2356,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2355,
                        "mutability": "mutable",
                        "name": "code",
                        "nameLocation": "1799:4:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2360,
                        "src": "1791:12:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2354,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1791:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1790:14:15"
                  },
                  "returnParameters": {
                    "id": 2357,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1819:0:15"
                  },
                  "scope": 2361,
                  "src": "1776:194:15",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2362,
              "src": "657:1315:15",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "99:1874:15"
        },
        "id": 15
      },
      "@openzeppelin/contracts/utils/Pausable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
          "exportedSymbols": {
            "Context": [
              2309
            ],
            "Pausable": [
              2469
            ]
          },
          "id": 2470,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2363,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "102:24:16"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../utils/Context.sol",
              "id": 2365,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2470,
              "sourceUnit": 2310,
              "src": "128:45:16",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2364,
                    "name": "Context",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2309,
                    "src": "136:7:16",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2367,
                    "name": "Context",
                    "nameLocations": [
                      "645:7:16"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2309,
                    "src": "645:7:16"
                  },
                  "id": 2368,
                  "nodeType": "InheritanceSpecifier",
                  "src": "645:7:16"
                }
              ],
              "canonicalName": "Pausable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2366,
                "nodeType": "StructuredDocumentation",
                "src": "175:439:16",
                "text": " @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place."
              },
              "fullyImplemented": true,
              "id": 2469,
              "linearizedBaseContracts": [
                2469,
                2309
              ],
              "name": "Pausable",
              "nameLocation": "633:8:16",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 2370,
                  "mutability": "mutable",
                  "name": "_paused",
                  "nameLocation": "672:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 2469,
                  "src": "659:20:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2369,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "659:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2371,
                    "nodeType": "StructuredDocumentation",
                    "src": "686:73:16",
                    "text": " @dev Emitted when the pause is triggered by `account`."
                  },
                  "eventSelector": "62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258",
                  "id": 2375,
                  "name": "Paused",
                  "nameLocation": "770:6:16",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2374,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2373,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "785:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2375,
                        "src": "777:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2372,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "777:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "776:17:16"
                  },
                  "src": "764:30:16"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2376,
                    "nodeType": "StructuredDocumentation",
                    "src": "800:70:16",
                    "text": " @dev Emitted when the pause is lifted by `account`."
                  },
                  "eventSelector": "5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa",
                  "id": 2380,
                  "name": "Unpaused",
                  "nameLocation": "881:8:16",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2378,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "898:7:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2380,
                        "src": "890:15:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2377,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "890:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "889:17:16"
                  },
                  "src": "875:32:16"
                },
                {
                  "documentation": {
                    "id": 2381,
                    "nodeType": "StructuredDocumentation",
                    "src": "913:76:16",
                    "text": " @dev The operation failed because the contract is paused."
                  },
                  "errorSelector": "d93c0665",
                  "id": 2383,
                  "name": "EnforcedPause",
                  "nameLocation": "1000:13:16",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1013:2:16"
                  },
                  "src": "994:22:16"
                },
                {
                  "documentation": {
                    "id": 2384,
                    "nodeType": "StructuredDocumentation",
                    "src": "1022:80:16",
                    "text": " @dev The operation failed because the contract is not paused."
                  },
                  "errorSelector": "8dfc202b",
                  "id": 2386,
                  "name": "ExpectedPause",
                  "nameLocation": "1113:13:16",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2385,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1126:2:16"
                  },
                  "src": "1107:22:16"
                },
                {
                  "body": {
                    "id": 2393,
                    "nodeType": "Block",
                    "src": "1340:47:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2389,
                            "name": "_requireNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2423,
                            "src": "1350:17:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 2390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1350:19:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2391,
                        "nodeType": "ExpressionStatement",
                        "src": "1350:19:16"
                      },
                      {
                        "id": 2392,
                        "nodeType": "PlaceholderStatement",
                        "src": "1379:1:16"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2387,
                    "nodeType": "StructuredDocumentation",
                    "src": "1135:175:16",
                    "text": " @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused."
                  },
                  "id": 2394,
                  "name": "whenNotPaused",
                  "nameLocation": "1324:13:16",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2388,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1337:2:16"
                  },
                  "src": "1315:72:16",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2401,
                    "nodeType": "Block",
                    "src": "1587:44:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2397,
                            "name": "_requirePaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2436,
                            "src": "1597:14:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 2398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1597:16:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2399,
                        "nodeType": "ExpressionStatement",
                        "src": "1597:16:16"
                      },
                      {
                        "id": 2400,
                        "nodeType": "PlaceholderStatement",
                        "src": "1623:1:16"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2395,
                    "nodeType": "StructuredDocumentation",
                    "src": "1393:167:16",
                    "text": " @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused."
                  },
                  "id": 2402,
                  "name": "whenPaused",
                  "nameLocation": "1574:10:16",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2396,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1584:2:16"
                  },
                  "src": "1565:66:16",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2410,
                    "nodeType": "Block",
                    "src": "1779:31:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 2408,
                          "name": "_paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2370,
                          "src": "1796:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2407,
                        "id": 2409,
                        "nodeType": "Return",
                        "src": "1789:14:16"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2403,
                    "nodeType": "StructuredDocumentation",
                    "src": "1637:84:16",
                    "text": " @dev Returns true if the contract is paused, and false otherwise."
                  },
                  "functionSelector": "5c975abb",
                  "id": 2411,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paused",
                  "nameLocation": "1735:6:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2404,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1741:2:16"
                  },
                  "returnParameters": {
                    "id": 2407,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2406,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2411,
                        "src": "1773:4:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2405,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1773:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1772:6:16"
                  },
                  "scope": 2469,
                  "src": "1726:84:16",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2422,
                    "nodeType": "Block",
                    "src": "1929:77:16",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2415,
                            "name": "paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2411,
                            "src": "1943:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 2416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1943:8:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2421,
                        "nodeType": "IfStatement",
                        "src": "1939:61:16",
                        "trueBody": {
                          "id": 2420,
                          "nodeType": "Block",
                          "src": "1953:47:16",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2417,
                                  "name": "EnforcedPause",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2383,
                                  "src": "1974:13:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 2418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1974:15:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2419,
                              "nodeType": "RevertStatement",
                              "src": "1967:22:16"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2412,
                    "nodeType": "StructuredDocumentation",
                    "src": "1816:57:16",
                    "text": " @dev Throws if the contract is paused."
                  },
                  "id": 2423,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_requireNotPaused",
                  "nameLocation": "1887:17:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2413,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1904:2:16"
                  },
                  "returnParameters": {
                    "id": 2414,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1929:0:16"
                  },
                  "scope": 2469,
                  "src": "1878:128:16",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2435,
                    "nodeType": "Block",
                    "src": "2126:78:16",
                    "statements": [
                      {
                        "condition": {
                          "id": 2429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "2140:9:16",
                          "subExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2427,
                              "name": "paused",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2411,
                              "src": "2141:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                "typeString": "function () view returns (bool)"
                              }
                            },
                            "id": 2428,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2141:8:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2434,
                        "nodeType": "IfStatement",
                        "src": "2136:62:16",
                        "trueBody": {
                          "id": 2433,
                          "nodeType": "Block",
                          "src": "2151:47:16",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2430,
                                  "name": "ExpectedPause",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2386,
                                  "src": "2172:13:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 2431,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2172:15:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2432,
                              "nodeType": "RevertStatement",
                              "src": "2165:22:16"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2424,
                    "nodeType": "StructuredDocumentation",
                    "src": "2012:61:16",
                    "text": " @dev Throws if the contract is not paused."
                  },
                  "id": 2436,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_requirePaused",
                  "nameLocation": "2087:14:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2425,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2101:2:16"
                  },
                  "returnParameters": {
                    "id": 2426,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2126:0:16"
                  },
                  "scope": 2469,
                  "src": "2078:126:16",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2451,
                    "nodeType": "Block",
                    "src": "2388:66:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 2444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2442,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2370,
                            "src": "2398:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 2443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2408:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "2398:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2445,
                        "nodeType": "ExpressionStatement",
                        "src": "2398:14:16"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2447,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "2434:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 2448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2434:12:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2446,
                            "name": "Paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2375,
                            "src": "2427:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2427:20:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2450,
                        "nodeType": "EmitStatement",
                        "src": "2422:25:16"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2437,
                    "nodeType": "StructuredDocumentation",
                    "src": "2210:124:16",
                    "text": " @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."
                  },
                  "id": 2452,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2440,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2439,
                        "name": "whenNotPaused",
                        "nameLocations": [
                          "2374:13:16"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2394,
                        "src": "2374:13:16"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2374:13:16"
                    }
                  ],
                  "name": "_pause",
                  "nameLocation": "2348:6:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2438,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2354:2:16"
                  },
                  "returnParameters": {
                    "id": 2441,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2388:0:16"
                  },
                  "scope": 2469,
                  "src": "2339:115:16",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2467,
                    "nodeType": "Block",
                    "src": "2634:69:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 2460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2458,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2370,
                            "src": "2644:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 2459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2654:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "2644:15:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2461,
                        "nodeType": "ExpressionStatement",
                        "src": "2644:15:16"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2463,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "2683:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 2464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2683:12:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2462,
                            "name": "Unpaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2380,
                            "src": "2674:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2674:22:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2466,
                        "nodeType": "EmitStatement",
                        "src": "2669:27:16"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2453,
                    "nodeType": "StructuredDocumentation",
                    "src": "2460:121:16",
                    "text": " @dev Returns to normal state.\n Requirements:\n - The contract must be paused."
                  },
                  "id": 2468,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2456,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2455,
                        "name": "whenPaused",
                        "nameLocations": [
                          "2623:10:16"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2402,
                        "src": "2623:10:16"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2623:10:16"
                    }
                  ],
                  "name": "_unpause",
                  "nameLocation": "2595:8:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2454,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2603:2:16"
                  },
                  "returnParameters": {
                    "id": 2457,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2634:0:16"
                  },
                  "scope": 2469,
                  "src": "2586:117:16",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2470,
              "src": "615:2090:16",
              "usedErrors": [
                2383,
                2386
              ],
              "usedEvents": [
                2375,
                2380
              ]
            }
          ],
          "src": "102:2604:16"
        },
        "id": 16
      },
      "@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol",
          "exportedSymbols": {
            "ReentrancyGuard": [
              2538
            ]
          },
          "id": 2539,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2471,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "109:24:17"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "canonicalName": "ReentrancyGuard",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2472,
                "nodeType": "StructuredDocumentation",
                "src": "135:894:17",
                "text": " @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n consider using {ReentrancyGuardTransient} instead.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."
              },
              "fullyImplemented": true,
              "id": 2538,
              "linearizedBaseContracts": [
                2538
              ],
              "name": "ReentrancyGuard",
              "nameLocation": "1048:15:17",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 2475,
                  "mutability": "constant",
                  "name": "NOT_ENTERED",
                  "nameLocation": "1843:11:17",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "1818:40:17",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1818:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31",
                    "id": 2474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1857:1:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 2478,
                  "mutability": "constant",
                  "name": "ENTERED",
                  "nameLocation": "1889:7:17",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "1864:36:17",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1864:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "32",
                    "id": 2477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1899:1:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 2480,
                  "mutability": "mutable",
                  "name": "_status",
                  "nameLocation": "1923:7:17",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "1907:23:17",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2479,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1907:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 2481,
                    "nodeType": "StructuredDocumentation",
                    "src": "1937:52:17",
                    "text": " @dev Unauthorized reentrant call."
                  },
                  "errorSelector": "3ee5aeb5",
                  "id": 2483,
                  "name": "ReentrancyGuardReentrantCall",
                  "nameLocation": "2000:28:17",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2482,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2028:2:17"
                  },
                  "src": "1994:37:17"
                },
                {
                  "body": {
                    "id": 2490,
                    "nodeType": "Block",
                    "src": "2051:38:17",
                    "statements": [
                      {
                        "expression": {
                          "id": 2488,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2486,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2480,
                            "src": "2061:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2487,
                            "name": "NOT_ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2475,
                            "src": "2071:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2061:21:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2489,
                        "nodeType": "ExpressionStatement",
                        "src": "2061:21:17"
                      }
                    ]
                  },
                  "id": 2491,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2484,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2048:2:17"
                  },
                  "returnParameters": {
                    "id": 2485,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2051:0:17"
                  },
                  "scope": 2538,
                  "src": "2037:52:17",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2501,
                    "nodeType": "Block",
                    "src": "2490:79:17",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2494,
                            "name": "_nonReentrantBefore",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2518,
                            "src": "2500:19:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 2495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2500:21:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2496,
                        "nodeType": "ExpressionStatement",
                        "src": "2500:21:17"
                      },
                      {
                        "id": 2497,
                        "nodeType": "PlaceholderStatement",
                        "src": "2531:1:17"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2498,
                            "name": "_nonReentrantAfter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2526,
                            "src": "2542:18:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 2499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2542:20:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2500,
                        "nodeType": "ExpressionStatement",
                        "src": "2542:20:17"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2492,
                    "nodeType": "StructuredDocumentation",
                    "src": "2095:366:17",
                    "text": " @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."
                  },
                  "id": 2502,
                  "name": "nonReentrant",
                  "nameLocation": "2475:12:17",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2493,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2487:2:17"
                  },
                  "src": "2466:103:17",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2517,
                    "nodeType": "Block",
                    "src": "2614:268:17",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2505,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2480,
                            "src": "2702:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 2506,
                            "name": "ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2478,
                            "src": "2713:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2702:18:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2512,
                        "nodeType": "IfStatement",
                        "src": "2698:86:17",
                        "trueBody": {
                          "id": 2511,
                          "nodeType": "Block",
                          "src": "2722:62:17",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2508,
                                  "name": "ReentrancyGuardReentrantCall",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2483,
                                  "src": "2743:28:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 2509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2743:30:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2510,
                              "nodeType": "RevertStatement",
                              "src": "2736:37:17"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2513,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2480,
                            "src": "2858:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2514,
                            "name": "ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2478,
                            "src": "2868:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2858:17:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2516,
                        "nodeType": "ExpressionStatement",
                        "src": "2858:17:17"
                      }
                    ]
                  },
                  "id": 2518,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_nonReentrantBefore",
                  "nameLocation": "2584:19:17",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2503,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2603:2:17"
                  },
                  "returnParameters": {
                    "id": 2504,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2614:0:17"
                  },
                  "scope": 2538,
                  "src": "2575:307:17",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2525,
                    "nodeType": "Block",
                    "src": "2926:170:17",
                    "statements": [
                      {
                        "expression": {
                          "id": 2523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2521,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2480,
                            "src": "3068:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2522,
                            "name": "NOT_ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2475,
                            "src": "3078:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3068:21:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2524,
                        "nodeType": "ExpressionStatement",
                        "src": "3068:21:17"
                      }
                    ]
                  },
                  "id": 2526,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_nonReentrantAfter",
                  "nameLocation": "2897:18:17",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2519,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2915:2:17"
                  },
                  "returnParameters": {
                    "id": 2520,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2926:0:17"
                  },
                  "scope": 2538,
                  "src": "2888:208:17",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2536,
                    "nodeType": "Block",
                    "src": "3339:42:17",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2532,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2480,
                            "src": "3356:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 2533,
                            "name": "ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2478,
                            "src": "3367:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3356:18:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2531,
                        "id": 2535,
                        "nodeType": "Return",
                        "src": "3349:25:17"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2527,
                    "nodeType": "StructuredDocumentation",
                    "src": "3102:168:17",
                    "text": " @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."
                  },
                  "id": 2537,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_reentrancyGuardEntered",
                  "nameLocation": "3284:23:17",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2528,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3307:2:17"
                  },
                  "returnParameters": {
                    "id": 2531,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2530,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2537,
                        "src": "3333:4:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2529,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3333:4:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3332:6:17"
                  },
                  "scope": 2538,
                  "src": "3275:106:17",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2539,
              "src": "1030:2353:17",
              "usedErrors": [
                2483
              ],
              "usedEvents": []
            }
          ],
          "src": "109:3275:17"
        },
        "id": 17
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
          "exportedSymbols": {
            "Math": [
              6710
            ],
            "SafeCast": [
              8475
            ],
            "SignedMath": [
              8619
            ],
            "Strings": [
              3940
            ]
          },
          "id": 3941,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2540,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:24:18"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "./math/Math.sol",
              "id": 2542,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3941,
              "sourceUnit": 6711,
              "src": "127:37:18",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2541,
                    "name": "Math",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6710,
                    "src": "135:4:18",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
              "file": "./math/SafeCast.sol",
              "id": 2544,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3941,
              "sourceUnit": 8476,
              "src": "165:45:18",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2543,
                    "name": "SafeCast",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8475,
                    "src": "173:8:18",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol",
              "file": "./math/SignedMath.sol",
              "id": 2546,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3941,
              "sourceUnit": 8620,
              "src": "211:49:18",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2545,
                    "name": "SignedMath",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8619,
                    "src": "219:10:18",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Strings",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 2547,
                "nodeType": "StructuredDocumentation",
                "src": "262:34:18",
                "text": " @dev String operations."
              },
              "fullyImplemented": true,
              "id": 3940,
              "linearizedBaseContracts": [
                3940
              ],
              "name": "Strings",
              "nameLocation": "305:7:18",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 2549,
                  "libraryName": {
                    "id": 2548,
                    "name": "SafeCast",
                    "nameLocations": [
                      "325:8:18"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8475,
                    "src": "325:8:18"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "319:21:18"
                },
                {
                  "constant": true,
                  "id": 2552,
                  "mutability": "constant",
                  "name": "HEX_DIGITS",
                  "nameLocation": "371:10:18",
                  "nodeType": "VariableDeclaration",
                  "scope": 3940,
                  "src": "346:56:18",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes16",
                    "typeString": "bytes16"
                  },
                  "typeName": {
                    "id": 2550,
                    "name": "bytes16",
                    "nodeType": "ElementaryTypeName",
                    "src": "346:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes16",
                      "typeString": "bytes16"
                    }
                  },
                  "value": {
                    "hexValue": "30313233343536373839616263646566",
                    "id": 2551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "384:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
                      "typeString": "literal_string \"0123456789abcdef\""
                    },
                    "value": "0123456789abcdef"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 2555,
                  "mutability": "constant",
                  "name": "ADDRESS_LENGTH",
                  "nameLocation": "431:14:18",
                  "nodeType": "VariableDeclaration",
                  "scope": 3940,
                  "src": "408:42:18",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2553,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "408:5:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "hexValue": "3230",
                    "id": 2554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "448:2:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20_by_1",
                      "typeString": "int_const 20"
                    },
                    "value": "20"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 2591,
                  "mutability": "constant",
                  "name": "SPECIAL_CHARS_LOOKUP",
                  "nameLocation": "481:20:18",
                  "nodeType": "VariableDeclaration",
                  "scope": 3940,
                  "src": "456:302:18",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2556,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "456:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4951760157141521116776380160_by_1",
                      "typeString": "int_const 4951760157141521116776380160"
                    },
                    "id": 2590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_rational_17179883264_by_1",
                        "typeString": "int_const 17179883264"
                      },
                      "id": 2585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_rational_14080_by_1",
                          "typeString": "int_const 14080"
                        },
                        "id": 2580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_rational_5888_by_1",
                            "typeString": "int_const 5888"
                          },
                          "id": 2575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_rational_1792_by_1",
                              "typeString": "int_const 1792"
                            },
                            "id": 2570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_rational_768_by_1",
                                "typeString": "int_const 768"
                              },
                              "id": 2565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "id": 2559,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 2557,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "513:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "30783038",
                                      "id": 2558,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "518:4:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "0x08"
                                    },
                                    "src": "513:9:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    }
                                  }
                                ],
                                "id": 2560,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "512:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "|",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_512_by_1",
                                      "typeString": "int_const 512"
                                    },
                                    "id": 2563,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 2561,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "552:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "30783039",
                                      "id": 2562,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "557:4:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_9_by_1",
                                        "typeString": "int_const 9"
                                      },
                                      "value": "0x09"
                                    },
                                    "src": "552:9:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_512_by_1",
                                      "typeString": "int_const 512"
                                    }
                                  }
                                ],
                                "id": 2564,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "551:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_512_by_1",
                                  "typeString": "int_const 512"
                                }
                              },
                              "src": "512:50:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_768_by_1",
                                "typeString": "int_const 768"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_1024_by_1",
                                    "typeString": "int_const 1024"
                                  },
                                  "id": 2568,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 2566,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "585:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "30783061",
                                    "id": 2567,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "590:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "0x0a"
                                  },
                                  "src": "585:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1024_by_1",
                                    "typeString": "int_const 1024"
                                  }
                                }
                              ],
                              "id": 2569,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "584:11:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1024_by_1",
                                "typeString": "int_const 1024"
                              }
                            },
                            "src": "512:83:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1792_by_1",
                              "typeString": "int_const 1792"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "|",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_rational_4096_by_1",
                                  "typeString": "int_const 4096"
                                },
                                "id": 2573,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "31",
                                  "id": 2571,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "622:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "hexValue": "30783063",
                                  "id": 2572,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "627:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_12_by_1",
                                    "typeString": "int_const 12"
                                  },
                                  "value": "0x0c"
                                },
                                "src": "622:9:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4096_by_1",
                                  "typeString": "int_const 4096"
                                }
                              }
                            ],
                            "id": 2574,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "621:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4096_by_1",
                              "typeString": "int_const 4096"
                            }
                          },
                          "src": "512:120:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_5888_by_1",
                            "typeString": "int_const 5888"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "|",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_rational_8192_by_1",
                                "typeString": "int_const 8192"
                              },
                              "id": 2578,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "31",
                                "id": 2576,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "661:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "hexValue": "30783064",
                                "id": 2577,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "666:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_13_by_1",
                                  "typeString": "int_const 13"
                                },
                                "value": "0x0d"
                              },
                              "src": "661:9:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8192_by_1",
                                "typeString": "int_const 8192"
                              }
                            }
                          ],
                          "id": 2579,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "660:11:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_8192_by_1",
                            "typeString": "int_const 8192"
                          }
                        },
                        "src": "512:159:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_14080_by_1",
                          "typeString": "int_const 14080"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_rational_17179869184_by_1",
                              "typeString": "int_const 17179869184"
                            },
                            "id": 2583,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "31",
                              "id": 2581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "706:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "30783232",
                              "id": 2582,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "711:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_34_by_1",
                                "typeString": "int_const 34"
                              },
                              "value": "0x22"
                            },
                            "src": "706:9:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_17179869184_by_1",
                              "typeString": "int_const 17179869184"
                            }
                          }
                        ],
                        "id": 2584,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "705:11:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_17179869184_by_1",
                          "typeString": "int_const 17179869184"
                        }
                      },
                      "src": "512:204:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_17179883264_by_1",
                        "typeString": "int_const 17179883264"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                            "typeString": "int_const 4951760157141521099596496896"
                          },
                          "id": 2588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "31",
                            "id": 2586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "748:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "30783563",
                            "id": 2587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "753:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_92_by_1",
                              "typeString": "int_const 92"
                            },
                            "value": "0x5c"
                          },
                          "src": "748:9:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                            "typeString": "int_const 4951760157141521099596496896"
                          }
                        }
                      ],
                      "id": 2589,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "747:11:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                        "typeString": "int_const 4951760157141521099596496896"
                      }
                    },
                    "src": "512:246:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4951760157141521116776380160_by_1",
                      "typeString": "int_const 4951760157141521116776380160"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 2592,
                    "nodeType": "StructuredDocumentation",
                    "src": "778:81:18",
                    "text": " @dev The `value` string doesn't fit in the specified `length`."
                  },
                  "errorSelector": "e22e27eb",
                  "id": 2598,
                  "name": "StringsInsufficientHexLength",
                  "nameLocation": "870:28:18",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2597,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2594,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "907:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2598,
                        "src": "899:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2593,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "899:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2596,
                        "mutability": "mutable",
                        "name": "length",
                        "nameLocation": "922:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2598,
                        "src": "914:14:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2595,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "898:31:18"
                  },
                  "src": "864:66:18"
                },
                {
                  "documentation": {
                    "id": 2599,
                    "nodeType": "StructuredDocumentation",
                    "src": "936:108:18",
                    "text": " @dev The string being parsed contains characters that are not in scope of the given base."
                  },
                  "errorSelector": "94e2737e",
                  "id": 2601,
                  "name": "StringsInvalidChar",
                  "nameLocation": "1055:18:18",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2600,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1073:2:18"
                  },
                  "src": "1049:27:18"
                },
                {
                  "documentation": {
                    "id": 2602,
                    "nodeType": "StructuredDocumentation",
                    "src": "1082:84:18",
                    "text": " @dev The string being parsed is not a properly formatted address."
                  },
                  "errorSelector": "1d15ae44",
                  "id": 2604,
                  "name": "StringsInvalidAddressFormat",
                  "nameLocation": "1177:27:18",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2603,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1204:2:18"
                  },
                  "src": "1171:36:18"
                },
                {
                  "body": {
                    "id": 2651,
                    "nodeType": "Block",
                    "src": "1379:561:18",
                    "statements": [
                      {
                        "id": 2650,
                        "nodeType": "UncheckedBlock",
                        "src": "1389:545:18",
                        "statements": [
                          {
                            "assignments": [
                              2613
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2613,
                                "mutability": "mutable",
                                "name": "length",
                                "nameLocation": "1421:6:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 2650,
                                "src": "1413:14:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2612,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1413:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2620,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 2616,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2607,
                                    "src": "1441:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 2614,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6710,
                                    "src": "1430:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$6710_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 2615,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "1435:5:18",
                                  "memberName": "log10",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6542,
                                  "src": "1430:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 2617,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1430:17:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 2618,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1450:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1430:21:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1413:38:18"
                          },
                          {
                            "assignments": [
                              2622
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2622,
                                "mutability": "mutable",
                                "name": "buffer",
                                "nameLocation": "1479:6:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 2650,
                                "src": "1465:20:18",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string"
                                },
                                "typeName": {
                                  "id": 2621,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1465:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2627,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 2625,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2613,
                                  "src": "1499:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2624,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "1488:10:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                },
                                "typeName": {
                                  "id": 2623,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1492:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                }
                              },
                              "id": 2626,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1488:18:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1465:41:18"
                          },
                          {
                            "assignments": [
                              2629
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2629,
                                "mutability": "mutable",
                                "name": "ptr",
                                "nameLocation": "1528:3:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 2650,
                                "src": "1520:11:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2628,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1520:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2630,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1520:11:18"
                          },
                          {
                            "AST": {
                              "nativeSrc": "1570:67:18",
                              "nodeType": "YulBlock",
                              "src": "1570:67:18",
                              "statements": [
                                {
                                  "nativeSrc": "1588:35:18",
                                  "nodeType": "YulAssignment",
                                  "src": "1588:35:18",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "buffer",
                                        "nativeSrc": "1599:6:18",
                                        "nodeType": "YulIdentifier",
                                        "src": "1599:6:18"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nativeSrc": "1611:2:18",
                                            "nodeType": "YulLiteral",
                                            "src": "1611:2:18",
                                            "type": "",
                                            "value": "32"
                                          },
                                          {
                                            "name": "length",
                                            "nativeSrc": "1615:6:18",
                                            "nodeType": "YulIdentifier",
                                            "src": "1615:6:18"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "1607:3:18",
                                          "nodeType": "YulIdentifier",
                                          "src": "1607:3:18"
                                        },
                                        "nativeSrc": "1607:15:18",
                                        "nodeType": "YulFunctionCall",
                                        "src": "1607:15:18"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "1595:3:18",
                                      "nodeType": "YulIdentifier",
                                      "src": "1595:3:18"
                                    },
                                    "nativeSrc": "1595:28:18",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1595:28:18"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "ptr",
                                      "nativeSrc": "1588:3:18",
                                      "nodeType": "YulIdentifier",
                                      "src": "1588:3:18"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 2622,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1599:6:18",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2613,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1615:6:18",
                                "valueSize": 1
                              },
                              {
                                "declaration": 2629,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1588:3:18",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 2631,
                            "nodeType": "InlineAssembly",
                            "src": "1545:92:18"
                          },
                          {
                            "body": {
                              "id": 2646,
                              "nodeType": "Block",
                              "src": "1663:234:18",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2634,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "--",
                                    "prefix": false,
                                    "src": "1681:5:18",
                                    "subExpression": {
                                      "id": 2633,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2629,
                                      "src": "1681:3:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2635,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1681:5:18"
                                },
                                {
                                  "AST": {
                                    "nativeSrc": "1729:86:18",
                                    "nodeType": "YulBlock",
                                    "src": "1729:86:18",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nativeSrc": "1759:3:18",
                                              "nodeType": "YulIdentifier",
                                              "src": "1759:3:18"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value",
                                                      "nativeSrc": "1773:5:18",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1773:5:18"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nativeSrc": "1780:2:18",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1780:2:18",
                                                      "type": "",
                                                      "value": "10"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "mod",
                                                    "nativeSrc": "1769:3:18",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1769:3:18"
                                                  },
                                                  "nativeSrc": "1769:14:18",
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1769:14:18"
                                                },
                                                {
                                                  "name": "HEX_DIGITS",
                                                  "nativeSrc": "1785:10:18",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1785:10:18"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "byte",
                                                "nativeSrc": "1764:4:18",
                                                "nodeType": "YulIdentifier",
                                                "src": "1764:4:18"
                                              },
                                              "nativeSrc": "1764:32:18",
                                              "nodeType": "YulFunctionCall",
                                              "src": "1764:32:18"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore8",
                                            "nativeSrc": "1751:7:18",
                                            "nodeType": "YulIdentifier",
                                            "src": "1751:7:18"
                                          },
                                          "nativeSrc": "1751:46:18",
                                          "nodeType": "YulFunctionCall",
                                          "src": "1751:46:18"
                                        },
                                        "nativeSrc": "1751:46:18",
                                        "nodeType": "YulExpressionStatement",
                                        "src": "1751:46:18"
                                      }
                                    ]
                                  },
                                  "evmVersion": "paris",
                                  "externalReferences": [
                                    {
                                      "declaration": 2552,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1785:10:18",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 2629,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1759:3:18",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 2607,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1773:5:18",
                                      "valueSize": 1
                                    }
                                  ],
                                  "flags": [
                                    "memory-safe"
                                  ],
                                  "id": 2636,
                                  "nodeType": "InlineAssembly",
                                  "src": "1704:111:18"
                                },
                                {
                                  "expression": {
                                    "id": 2639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2637,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2607,
                                      "src": "1832:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "hexValue": "3130",
                                      "id": 2638,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1841:2:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10_by_1",
                                        "typeString": "int_const 10"
                                      },
                                      "value": "10"
                                    },
                                    "src": "1832:11:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2640,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1832:11:18"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2643,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2641,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2607,
                                      "src": "1865:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 2642,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1874:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1865:10:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2645,
                                  "nodeType": "IfStatement",
                                  "src": "1861:21:18",
                                  "trueBody": {
                                    "id": 2644,
                                    "nodeType": "Break",
                                    "src": "1877:5:18"
                                  }
                                }
                              ]
                            },
                            "condition": {
                              "hexValue": "74727565",
                              "id": 2632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1657:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "id": 2647,
                            "nodeType": "WhileStatement",
                            "src": "1650:247:18"
                          },
                          {
                            "expression": {
                              "id": 2648,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2622,
                              "src": "1917:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 2611,
                            "id": 2649,
                            "nodeType": "Return",
                            "src": "1910:13:18"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2605,
                    "nodeType": "StructuredDocumentation",
                    "src": "1213:90:18",
                    "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
                  },
                  "id": 2652,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toString",
                  "nameLocation": "1317:8:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2608,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2607,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1334:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2652,
                        "src": "1326:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2606,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1326:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1325:15:18"
                  },
                  "returnParameters": {
                    "id": 2611,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2610,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2652,
                        "src": "1364:13:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2609,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1364:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1363:15:18"
                  },
                  "scope": 3940,
                  "src": "1308:632:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2677,
                    "nodeType": "Block",
                    "src": "2116:92:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 2665,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2663,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2655,
                                  "src": "2147:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 2664,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2155:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2147:9:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "hexValue": "",
                                "id": 2667,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2165:2:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                },
                                "value": ""
                              },
                              "id": 2668,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "2147:20:18",
                              "trueExpression": {
                                "hexValue": "2d",
                                "id": 2666,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2159:3:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
                                  "typeString": "literal_string \"-\""
                                },
                                "value": "-"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 2672,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2655,
                                      "src": "2193:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2670,
                                      "name": "SignedMath",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8619,
                                      "src": "2178:10:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SignedMath_$8619_$",
                                        "typeString": "type(library SignedMath)"
                                      }
                                    },
                                    "id": 2671,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "2189:3:18",
                                    "memberName": "abs",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8618,
                                    "src": "2178:14:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$",
                                      "typeString": "function (int256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2673,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2178:21:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2669,
                                "name": "toString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2652,
                                "src": "2169:8:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                }
                              },
                              "id": 2674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2169:31:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 2661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2133:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 2660,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "2133:6:18",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2140:6:18",
                            "memberName": "concat",
                            "nodeType": "MemberAccess",
                            "src": "2133:13:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () pure returns (string memory)"
                            }
                          },
                          "id": 2675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2133:68:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2659,
                        "id": 2676,
                        "nodeType": "Return",
                        "src": "2126:75:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2653,
                    "nodeType": "StructuredDocumentation",
                    "src": "1946:89:18",
                    "text": " @dev Converts a `int256` to its ASCII `string` decimal representation."
                  },
                  "id": 2678,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toStringSigned",
                  "nameLocation": "2049:14:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2656,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2655,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2071:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2678,
                        "src": "2064:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2654,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2064:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2063:14:18"
                  },
                  "returnParameters": {
                    "id": 2659,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2658,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2678,
                        "src": "2101:13:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2657,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2101:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2100:15:18"
                  },
                  "scope": 3940,
                  "src": "2040:168:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2697,
                    "nodeType": "Block",
                    "src": "2387:100:18",
                    "statements": [
                      {
                        "id": 2696,
                        "nodeType": "UncheckedBlock",
                        "src": "2397:84:18",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2687,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2681,
                                  "src": "2440:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2693,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 2690,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2681,
                                        "src": "2459:5:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 2688,
                                        "name": "Math",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6710,
                                        "src": "2447:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Math_$6710_$",
                                          "typeString": "type(library Math)"
                                        }
                                      },
                                      "id": 2689,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "2452:6:18",
                                      "memberName": "log256",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6653,
                                      "src": "2447:11:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 2691,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2447:18:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 2692,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2468:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "2447:22:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2686,
                                "name": "toHexString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  2698,
                                  2781,
                                  2801
                                ],
                                "referencedDeclaration": 2781,
                                "src": "2428:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256,uint256) pure returns (string memory)"
                                }
                              },
                              "id": 2694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2428:42:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 2685,
                            "id": 2695,
                            "nodeType": "Return",
                            "src": "2421:49:18"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2679,
                    "nodeType": "StructuredDocumentation",
                    "src": "2214:94:18",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
                  },
                  "id": 2698,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "2322:11:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2682,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2681,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2342:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2698,
                        "src": "2334:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2680,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2334:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2333:15:18"
                  },
                  "returnParameters": {
                    "id": 2685,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2684,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2698,
                        "src": "2372:13:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2683,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2372:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2371:15:18"
                  },
                  "scope": 3940,
                  "src": "2313:174:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2780,
                    "nodeType": "Block",
                    "src": "2700:435:18",
                    "statements": [
                      {
                        "assignments": [
                          2709
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2709,
                            "mutability": "mutable",
                            "name": "localValue",
                            "nameLocation": "2718:10:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2780,
                            "src": "2710:18:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2708,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2710:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2711,
                        "initialValue": {
                          "id": 2710,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2701,
                          "src": "2731:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2710:26:18"
                      },
                      {
                        "assignments": [
                          2713
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2713,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "2759:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2780,
                            "src": "2746:19:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2712,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2746:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2722,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2718,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 2716,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2778:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 2717,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2703,
                                  "src": "2782:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2778:10:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 2719,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2791:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "2778:14:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "2768:9:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 2714,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2772:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 2721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2768:25:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2746:47:18"
                      },
                      {
                        "expression": {
                          "id": 2727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2723,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2713,
                              "src": "2803:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2725,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 2724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2810:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2803:9:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 2726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2815:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                              "typeString": "literal_string \"0\""
                            },
                            "value": "0"
                          },
                          "src": "2803:15:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 2728,
                        "nodeType": "ExpressionStatement",
                        "src": "2803:15:18"
                      },
                      {
                        "expression": {
                          "id": 2733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2729,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2713,
                              "src": "2828:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2731,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 2730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2835:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2828:9:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "78",
                            "id": 2732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2840:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
                              "typeString": "literal_string \"x\""
                            },
                            "value": "x"
                          },
                          "src": "2828:15:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 2734,
                        "nodeType": "ExpressionStatement",
                        "src": "2828:15:18"
                      },
                      {
                        "body": {
                          "id": 2763,
                          "nodeType": "Block",
                          "src": "2898:95:18",
                          "statements": [
                            {
                              "expression": {
                                "id": 2757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 2749,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2713,
                                    "src": "2912:6:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 2751,
                                  "indexExpression": {
                                    "id": 2750,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2736,
                                    "src": "2919:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2912:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 2752,
                                    "name": "HEX_DIGITS",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2552,
                                    "src": "2924:10:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes16",
                                      "typeString": "bytes16"
                                    }
                                  },
                                  "id": 2756,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2755,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2753,
                                      "name": "localValue",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2709,
                                      "src": "2935:10:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&",
                                    "rightExpression": {
                                      "hexValue": "307866",
                                      "id": 2754,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2948:3:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_15_by_1",
                                        "typeString": "int_const 15"
                                      },
                                      "value": "0xf"
                                    },
                                    "src": "2935:16:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2924:28:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "src": "2912:40:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "id": 2758,
                              "nodeType": "ExpressionStatement",
                              "src": "2912:40:18"
                            },
                            {
                              "expression": {
                                "id": 2761,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2759,
                                  "name": "localValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2709,
                                  "src": "2966:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 2760,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2981:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "2966:16:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2762,
                              "nodeType": "ExpressionStatement",
                              "src": "2966:16:18"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2743,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2736,
                            "src": "2886:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 2744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2890:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2886:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2764,
                        "initializationExpression": {
                          "assignments": [
                            2736
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 2736,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "2866:1:18",
                              "nodeType": "VariableDeclaration",
                              "scope": 2764,
                              "src": "2858:9:18",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 2735,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2858:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 2742,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2739,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "32",
                                "id": 2737,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2870:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 2738,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2703,
                                "src": "2874:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2870:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 2740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2883:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "2870:14:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2858:26:18"
                        },
                        "isSimpleCounterLoop": false,
                        "loopExpression": {
                          "expression": {
                            "id": 2747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": true,
                            "src": "2893:3:18",
                            "subExpression": {
                              "id": 2746,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2736,
                              "src": "2895:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2748,
                          "nodeType": "ExpressionStatement",
                          "src": "2893:3:18"
                        },
                        "nodeType": "ForStatement",
                        "src": "2853:140:18"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2765,
                            "name": "localValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2709,
                            "src": "3006:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2766,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3020:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3006:15:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2774,
                        "nodeType": "IfStatement",
                        "src": "3002:96:18",
                        "trueBody": {
                          "id": 2773,
                          "nodeType": "Block",
                          "src": "3023:75:18",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 2769,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2701,
                                    "src": "3073:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 2770,
                                    "name": "length",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2703,
                                    "src": "3080:6:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2768,
                                  "name": "StringsInsufficientHexLength",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2598,
                                  "src": "3044:28:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256) pure"
                                  }
                                },
                                "id": 2771,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3044:43:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2772,
                              "nodeType": "RevertStatement",
                              "src": "3037:50:18"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2777,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2713,
                              "src": "3121:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2776,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3114:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 2775,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "3114:6:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 2778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3114:14:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2707,
                        "id": 2779,
                        "nodeType": "Return",
                        "src": "3107:21:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2699,
                    "nodeType": "StructuredDocumentation",
                    "src": "2493:112:18",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
                  },
                  "id": 2781,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "2619:11:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2701,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2639:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2781,
                        "src": "2631:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2700,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2631:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2703,
                        "mutability": "mutable",
                        "name": "length",
                        "nameLocation": "2654:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2781,
                        "src": "2646:14:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2702,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2646:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2630:31:18"
                  },
                  "returnParameters": {
                    "id": 2707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2706,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2781,
                        "src": "2685:13:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2705,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2685:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2684:15:18"
                  },
                  "scope": 3940,
                  "src": "2610:525:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2800,
                    "nodeType": "Block",
                    "src": "3367:75:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 2794,
                                      "name": "addr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2784,
                                      "src": "3412:4:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 2793,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3404:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint160_$",
                                      "typeString": "type(uint160)"
                                    },
                                    "typeName": {
                                      "id": 2792,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3404:7:18",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2795,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3404:13:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "id": 2791,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3396:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 2790,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3396:7:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3396:22:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2797,
                              "name": "ADDRESS_LENGTH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2555,
                              "src": "3420:14:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 2789,
                            "name": "toHexString",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2698,
                              2781,
                              2801
                            ],
                            "referencedDeclaration": 2781,
                            "src": "3384:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (string memory)"
                            }
                          },
                          "id": 2798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3384:51:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2788,
                        "id": 2799,
                        "nodeType": "Return",
                        "src": "3377:58:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2782,
                    "nodeType": "StructuredDocumentation",
                    "src": "3141:148:18",
                    "text": " @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation."
                  },
                  "id": 2801,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "3303:11:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2785,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2784,
                        "mutability": "mutable",
                        "name": "addr",
                        "nameLocation": "3323:4:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2801,
                        "src": "3315:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2783,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3315:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3314:14:18"
                  },
                  "returnParameters": {
                    "id": 2788,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2787,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2801,
                        "src": "3352:13:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2786,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3352:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3351:15:18"
                  },
                  "scope": 3940,
                  "src": "3294:148:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2865,
                    "nodeType": "Block",
                    "src": "3699:642:18",
                    "statements": [
                      {
                        "assignments": [
                          2810
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2810,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "3722:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2865,
                            "src": "3709:19:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2809,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3709:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2817,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2814,
                                  "name": "addr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2804,
                                  "src": "3749:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2813,
                                "name": "toHexString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  2698,
                                  2781,
                                  2801
                                ],
                                "referencedDeclaration": 2801,
                                "src": "3737:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (address) pure returns (string memory)"
                                }
                              },
                              "id": 2815,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3737:17:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 2812,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3731:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 2811,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3731:5:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 2816,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3731:24:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3709:46:18"
                      },
                      {
                        "assignments": [
                          2819
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2819,
                            "mutability": "mutable",
                            "name": "hashValue",
                            "nameLocation": "3848:9:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2865,
                            "src": "3840:17:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2818,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3840:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2820,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3840:17:18"
                      },
                      {
                        "AST": {
                          "nativeSrc": "3892:78:18",
                          "nodeType": "YulBlock",
                          "src": "3892:78:18",
                          "statements": [
                            {
                              "nativeSrc": "3906:54:18",
                              "nodeType": "YulAssignment",
                              "src": "3906:54:18",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3923:2:18",
                                    "nodeType": "YulLiteral",
                                    "src": "3923:2:18",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "buffer",
                                            "nativeSrc": "3941:6:18",
                                            "nodeType": "YulIdentifier",
                                            "src": "3941:6:18"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "3949:4:18",
                                            "nodeType": "YulLiteral",
                                            "src": "3949:4:18",
                                            "type": "",
                                            "value": "0x22"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "3937:3:18",
                                          "nodeType": "YulIdentifier",
                                          "src": "3937:3:18"
                                        },
                                        "nativeSrc": "3937:17:18",
                                        "nodeType": "YulFunctionCall",
                                        "src": "3937:17:18"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "3956:2:18",
                                        "nodeType": "YulLiteral",
                                        "src": "3956:2:18",
                                        "type": "",
                                        "value": "40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nativeSrc": "3927:9:18",
                                      "nodeType": "YulIdentifier",
                                      "src": "3927:9:18"
                                    },
                                    "nativeSrc": "3927:32:18",
                                    "nodeType": "YulFunctionCall",
                                    "src": "3927:32:18"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nativeSrc": "3919:3:18",
                                  "nodeType": "YulIdentifier",
                                  "src": "3919:3:18"
                                },
                                "nativeSrc": "3919:41:18",
                                "nodeType": "YulFunctionCall",
                                "src": "3919:41:18"
                              },
                              "variableNames": [
                                {
                                  "name": "hashValue",
                                  "nativeSrc": "3906:9:18",
                                  "nodeType": "YulIdentifier",
                                  "src": "3906:9:18"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 2810,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3941:6:18",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2819,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3906:9:18",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 2821,
                        "nodeType": "InlineAssembly",
                        "src": "3867:103:18"
                      },
                      {
                        "body": {
                          "id": 2858,
                          "nodeType": "Block",
                          "src": "4013:291:18",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 2845,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2834,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2832,
                                      "name": "hashValue",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2819,
                                      "src": "4119:9:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&",
                                    "rightExpression": {
                                      "hexValue": "307866",
                                      "id": 2833,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4131:3:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_15_by_1",
                                        "typeString": "int_const 15"
                                      },
                                      "value": "0xf"
                                    },
                                    "src": "4119:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "37",
                                    "id": 2835,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4137:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_7_by_1",
                                      "typeString": "int_const 7"
                                    },
                                    "value": "7"
                                  },
                                  "src": "4119:19:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 2844,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "baseExpression": {
                                          "id": 2839,
                                          "name": "buffer",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2810,
                                          "src": "4148:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2841,
                                        "indexExpression": {
                                          "id": 2840,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2823,
                                          "src": "4155:1:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4148:9:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      ],
                                      "id": 2838,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "4142:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint8_$",
                                        "typeString": "type(uint8)"
                                      },
                                      "typeName": {
                                        "id": 2837,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4142:5:18",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 2842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4142:16:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "3936",
                                    "id": 2843,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4161:2:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  "src": "4142:21:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "4119:44:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2853,
                              "nodeType": "IfStatement",
                              "src": "4115:150:18",
                              "trueBody": {
                                "id": 2852,
                                "nodeType": "Block",
                                "src": "4165:100:18",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 2850,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 2846,
                                          "name": "buffer",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2810,
                                          "src": "4233:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2848,
                                        "indexExpression": {
                                          "id": 2847,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2823,
                                          "src": "4240:1:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "4233:9:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "^=",
                                      "rightHandSide": {
                                        "hexValue": "30783230",
                                        "id": 2849,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4246:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "0x20"
                                      },
                                      "src": "4233:17:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    },
                                    "id": 2851,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4233:17:18"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 2856,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2854,
                                  "name": "hashValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2819,
                                  "src": "4278:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 2855,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4292:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "4278:15:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2857,
                              "nodeType": "ExpressionStatement",
                              "src": "4278:15:18"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2826,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2823,
                            "src": "4001:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 2827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4005:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "4001:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2859,
                        "initializationExpression": {
                          "assignments": [
                            2823
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 2823,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "3993:1:18",
                              "nodeType": "VariableDeclaration",
                              "scope": 2859,
                              "src": "3985:9:18",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 2822,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3985:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 2825,
                          "initialValue": {
                            "hexValue": "3431",
                            "id": 2824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3997:2:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_41_by_1",
                              "typeString": "int_const 41"
                            },
                            "value": "41"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "3985:14:18"
                        },
                        "isSimpleCounterLoop": false,
                        "loopExpression": {
                          "expression": {
                            "id": 2830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": true,
                            "src": "4008:3:18",
                            "subExpression": {
                              "id": 2829,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2823,
                              "src": "4010:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2831,
                          "nodeType": "ExpressionStatement",
                          "src": "4008:3:18"
                        },
                        "nodeType": "ForStatement",
                        "src": "3980:324:18"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2862,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2810,
                              "src": "4327:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4320:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 2860,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "4320:6:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 2863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4320:14:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2808,
                        "id": 2864,
                        "nodeType": "Return",
                        "src": "4313:21:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2802,
                    "nodeType": "StructuredDocumentation",
                    "src": "3448:165:18",
                    "text": " @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n representation, according to EIP-55."
                  },
                  "id": 2866,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toChecksumHexString",
                  "nameLocation": "3627:19:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2805,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2804,
                        "mutability": "mutable",
                        "name": "addr",
                        "nameLocation": "3655:4:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2866,
                        "src": "3647:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2803,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3647:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3646:14:18"
                  },
                  "returnParameters": {
                    "id": 2808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2807,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2866,
                        "src": "3684:13:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2806,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3684:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3683:15:18"
                  },
                  "scope": 3940,
                  "src": "3618:723:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2902,
                    "nodeType": "Block",
                    "src": "4496:104:18",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2878,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2869,
                                    "src": "4519:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2877,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4513:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 2876,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4513:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2879,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4513:8:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2880,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4522:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4513:15:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2883,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2871,
                                    "src": "4538:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2882,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4532:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 2881,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4532:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2884,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4532:8:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4541:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4532:15:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4513:34:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 2899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 2890,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2869,
                                      "src": "4567:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    ],
                                    "id": 2889,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4561:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                      "typeString": "type(bytes storage pointer)"
                                    },
                                    "typeName": {
                                      "id": 2888,
                                      "name": "bytes",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4561:5:18",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2891,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4561:8:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 2887,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "4551:9:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 2892,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4551:19:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 2896,
                                      "name": "b",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2871,
                                      "src": "4590:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    ],
                                    "id": 2895,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4584:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                      "typeString": "type(bytes storage pointer)"
                                    },
                                    "typeName": {
                                      "id": 2894,
                                      "name": "bytes",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4584:5:18",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2897,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4584:8:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 2893,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "4574:9:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 2898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4574:19:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "src": "4551:42:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4513:80:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2875,
                        "id": 2901,
                        "nodeType": "Return",
                        "src": "4506:87:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2867,
                    "nodeType": "StructuredDocumentation",
                    "src": "4347:66:18",
                    "text": " @dev Returns true if the two strings are equal."
                  },
                  "id": 2903,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "equal",
                  "nameLocation": "4427:5:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2872,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2869,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "4447:1:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2903,
                        "src": "4433:15:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2868,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4433:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2871,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "4464:1:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2903,
                        "src": "4450:15:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2870,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4450:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4432:34:18"
                  },
                  "returnParameters": {
                    "id": 2875,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2874,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2903,
                        "src": "4490:4:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2873,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4490:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4489:6:18"
                  },
                  "scope": 3940,
                  "src": "4418:182:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2921,
                    "nodeType": "Block",
                    "src": "4897:64:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2912,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2906,
                              "src": "4924:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 2913,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4931:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2916,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2906,
                                    "src": "4940:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2915,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4934:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 2914,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4934:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2917,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4934:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4947:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4934:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2911,
                            "name": "parseUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2922,
                              2953
                            ],
                            "referencedDeclaration": 2953,
                            "src": "4914:9:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4914:40:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2910,
                        "id": 2920,
                        "nodeType": "Return",
                        "src": "4907:47:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2904,
                    "nodeType": "StructuredDocumentation",
                    "src": "4606:214:18",
                    "text": " @dev Parse a decimal string and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"
                  },
                  "id": 2922,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseUint",
                  "nameLocation": "4834:9:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2907,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2906,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "4858:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2922,
                        "src": "4844:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2905,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4844:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4843:21:18"
                  },
                  "returnParameters": {
                    "id": 2910,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2909,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2922,
                        "src": "4888:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2908,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4888:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4887:9:18"
                  },
                  "scope": 3940,
                  "src": "4825:136:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2952,
                    "nodeType": "Block",
                    "src": "5366:153:18",
                    "statements": [
                      {
                        "assignments": [
                          2935,
                          2937
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2935,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5382:7:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2952,
                            "src": "5377:12:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 2934,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5377:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 2937,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "5399:5:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2952,
                            "src": "5391:13:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2936,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5391:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2943,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2939,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2925,
                              "src": "5421:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 2940,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2927,
                              "src": "5428:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2941,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2929,
                              "src": "5435:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2938,
                            "name": "tryParseUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2974,
                              3011
                            ],
                            "referencedDeclaration": 3011,
                            "src": "5408:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 2942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5408:31:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5376:63:18"
                      },
                      {
                        "condition": {
                          "id": 2945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5453:8:18",
                          "subExpression": {
                            "id": 2944,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2935,
                            "src": "5454:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2949,
                        "nodeType": "IfStatement",
                        "src": "5449:41:18",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2946,
                              "name": "StringsInvalidChar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2601,
                              "src": "5470:18:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 2947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5470:20:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2948,
                          "nodeType": "RevertStatement",
                          "src": "5463:27:18"
                        }
                      },
                      {
                        "expression": {
                          "id": 2950,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2937,
                          "src": "5507:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2933,
                        "id": 2951,
                        "nodeType": "Return",
                        "src": "5500:12:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2923,
                    "nodeType": "StructuredDocumentation",
                    "src": "4967:294:18",
                    "text": " @dev Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"
                  },
                  "id": 2953,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseUint",
                  "nameLocation": "5275:9:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2925,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "5299:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2953,
                        "src": "5285:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2924,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5285:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2927,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "5314:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2953,
                        "src": "5306:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2926,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5306:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2929,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "5329:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2953,
                        "src": "5321:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2928,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5321:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5284:49:18"
                  },
                  "returnParameters": {
                    "id": 2933,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2932,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2953,
                        "src": "5357:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2931,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5357:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5356:9:18"
                  },
                  "scope": 3940,
                  "src": "5266:253:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2973,
                    "nodeType": "Block",
                    "src": "5840:83:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2964,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2956,
                              "src": "5886:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 2965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5893:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2968,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2956,
                                    "src": "5902:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2967,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5896:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 2966,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5896:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2969,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5896:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5909:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "5896:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2963,
                            "name": "_tryParseUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3081,
                            "src": "5857:28:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 2971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5857:59:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 2962,
                        "id": 2972,
                        "nodeType": "Return",
                        "src": "5850:66:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2954,
                    "nodeType": "StructuredDocumentation",
                    "src": "5525:215:18",
                    "text": " @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 2974,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseUint",
                  "nameLocation": "5754:12:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2957,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2956,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "5781:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2974,
                        "src": "5767:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2955,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5767:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5766:21:18"
                  },
                  "returnParameters": {
                    "id": 2962,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2959,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "5816:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2974,
                        "src": "5811:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2958,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5811:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2961,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5833:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2974,
                        "src": "5825:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2960,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5825:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5810:29:18"
                  },
                  "scope": 3940,
                  "src": "5745:178:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3010,
                    "nodeType": "Block",
                    "src": "6325:144:18",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2988,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2981,
                              "src": "6339:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2991,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2977,
                                    "src": "6351:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 2990,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6345:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 2989,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6345:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2992,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6345:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6358:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "6345:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6339:25:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2995,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2979,
                              "src": "6368:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 2996,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2981,
                              "src": "6376:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6368:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6339:40:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3003,
                        "nodeType": "IfStatement",
                        "src": "6335:63:18",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 2999,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6389:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 3000,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6396:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 3001,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "6388:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 2987,
                          "id": 3002,
                          "nodeType": "Return",
                          "src": "6381:17:18"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3005,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2977,
                              "src": "6444:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 3006,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2979,
                              "src": "6451:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3007,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2981,
                              "src": "6458:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3004,
                            "name": "_tryParseUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3081,
                            "src": "6415:28:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 3008,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6415:47:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 2987,
                        "id": 3009,
                        "nodeType": "Return",
                        "src": "6408:54:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2975,
                    "nodeType": "StructuredDocumentation",
                    "src": "5929:238:18",
                    "text": " @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 3011,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseUint",
                  "nameLocation": "6181:12:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2982,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2977,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "6217:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3011,
                        "src": "6203:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2976,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6203:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2979,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "6240:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3011,
                        "src": "6232:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2978,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6232:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2981,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "6263:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3011,
                        "src": "6255:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2980,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6255:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6193:79:18"
                  },
                  "returnParameters": {
                    "id": 2987,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2984,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "6301:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3011,
                        "src": "6296:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2983,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6296:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2986,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6318:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3011,
                        "src": "6310:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2985,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6310:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6295:29:18"
                  },
                  "scope": 3940,
                  "src": "6172:297:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3080,
                    "nodeType": "Block",
                    "src": "6872:347:18",
                    "statements": [
                      {
                        "assignments": [
                          3026
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3026,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "6895:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3080,
                            "src": "6882:19:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3025,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6882:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3031,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3029,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3014,
                              "src": "6910:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3028,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6904:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 3027,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6904:5:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6904:12:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6882:34:18"
                      },
                      {
                        "assignments": [
                          3033
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3033,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "6935:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3080,
                            "src": "6927:14:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3032,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6927:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3035,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6944:1:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6927:18:18"
                      },
                      {
                        "body": {
                          "id": 3074,
                          "nodeType": "Block",
                          "src": "6993:189:18",
                          "statements": [
                            {
                              "assignments": [
                                3047
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3047,
                                  "mutability": "mutable",
                                  "name": "chr",
                                  "nameLocation": "7013:3:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3074,
                                  "src": "7007:9:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "typeName": {
                                    "id": 3046,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7007:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3057,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 3052,
                                            "name": "buffer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3026,
                                            "src": "7062:6:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          {
                                            "id": 3053,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3037,
                                            "src": "7070:1:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 3051,
                                          "name": "_unsafeReadBytesOffset",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3939,
                                          "src": "7039:22:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 3054,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7039:33:18",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 3050,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7032:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bytes1_$",
                                        "typeString": "type(bytes1)"
                                      },
                                      "typeName": {
                                        "id": 3049,
                                        "name": "bytes1",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7032:6:18",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3055,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7032:41:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  ],
                                  "id": 3048,
                                  "name": "_tryParseChr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3761,
                                  "src": "7019:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$",
                                    "typeString": "function (bytes1) pure returns (uint8)"
                                  }
                                },
                                "id": 3056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7019:55:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7007:67:18"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 3060,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3058,
                                  "name": "chr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3047,
                                  "src": "7092:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "39",
                                  "id": 3059,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7098:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_9_by_1",
                                    "typeString": "int_const 9"
                                  },
                                  "value": "9"
                                },
                                "src": "7092:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3065,
                              "nodeType": "IfStatement",
                              "src": "7088:30:18",
                              "trueBody": {
                                "expression": {
                                  "components": [
                                    {
                                      "hexValue": "66616c7365",
                                      "id": 3061,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7109:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    {
                                      "hexValue": "30",
                                      "id": 3062,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7116:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "id": 3063,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7108:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                                    "typeString": "tuple(bool,int_const 0)"
                                  }
                                },
                                "functionReturnParameters": 3024,
                                "id": 3064,
                                "nodeType": "Return",
                                "src": "7101:17:18"
                              }
                            },
                            {
                              "expression": {
                                "id": 3068,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3066,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3033,
                                  "src": "7132:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "*=",
                                "rightHandSide": {
                                  "hexValue": "3130",
                                  "id": 3067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7142:2:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "src": "7132:12:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3069,
                              "nodeType": "ExpressionStatement",
                              "src": "7132:12:18"
                            },
                            {
                              "expression": {
                                "id": 3072,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3070,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3033,
                                  "src": "7158:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "id": 3071,
                                  "name": "chr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3047,
                                  "src": "7168:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "7158:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3073,
                              "nodeType": "ExpressionStatement",
                              "src": "7158:13:18"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3040,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3037,
                            "src": "6979:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 3041,
                            "name": "end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3018,
                            "src": "6983:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6979:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3075,
                        "initializationExpression": {
                          "assignments": [
                            3037
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3037,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "6968:1:18",
                              "nodeType": "VariableDeclaration",
                              "scope": 3075,
                              "src": "6960:9:18",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3036,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6960:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3039,
                          "initialValue": {
                            "id": 3038,
                            "name": "begin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3016,
                            "src": "6972:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "6960:17:18"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 3044,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "6988:3:18",
                            "subExpression": {
                              "id": 3043,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3037,
                              "src": "6990:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3045,
                          "nodeType": "ExpressionStatement",
                          "src": "6988:3:18"
                        },
                        "nodeType": "ForStatement",
                        "src": "6955:227:18"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 3076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7199:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 3077,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3033,
                              "src": "7205:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3078,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7198:14:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 3024,
                        "id": 3079,
                        "nodeType": "Return",
                        "src": "7191:21:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3012,
                    "nodeType": "StructuredDocumentation",
                    "src": "6475:224:18",
                    "text": " @dev Implementation of {tryParseUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."
                  },
                  "id": 3081,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseUintUncheckedBounds",
                  "nameLocation": "6713:28:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3019,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3014,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "6765:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "6751:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3013,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6751:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3016,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "6788:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "6780:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3015,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6780:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3018,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "6811:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "6803:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3017,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6803:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6741:79:18"
                  },
                  "returnParameters": {
                    "id": 3024,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3021,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "6848:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "6843:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3020,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6843:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3023,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6865:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "6857:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3022,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6857:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6842:29:18"
                  },
                  "scope": 3940,
                  "src": "6704:515:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3099,
                    "nodeType": "Block",
                    "src": "7516:63:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3090,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3084,
                              "src": "7542:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 3091,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7549:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3094,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3084,
                                    "src": "7558:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3093,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7552:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3092,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7552:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7552:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3096,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7565:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "7552:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3089,
                            "name": "parseInt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3100,
                              3131
                            ],
                            "referencedDeclaration": 3131,
                            "src": "7533:8:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (int256)"
                            }
                          },
                          "id": 3097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7533:39:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3088,
                        "id": 3098,
                        "nodeType": "Return",
                        "src": "7526:46:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3082,
                    "nodeType": "StructuredDocumentation",
                    "src": "7225:216:18",
                    "text": " @dev Parse a decimal string and returns the value as a `int256`.\n Requirements:\n - The string must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."
                  },
                  "id": 3100,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseInt",
                  "nameLocation": "7455:8:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3085,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3084,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "7478:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3100,
                        "src": "7464:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3083,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7464:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7463:21:18"
                  },
                  "returnParameters": {
                    "id": 3088,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3087,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3100,
                        "src": "7508:6:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3086,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7508:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7507:8:18"
                  },
                  "scope": 3940,
                  "src": "7446:133:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3130,
                    "nodeType": "Block",
                    "src": "7984:151:18",
                    "statements": [
                      {
                        "assignments": [
                          3113,
                          3115
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3113,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "8000:7:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3130,
                            "src": "7995:12:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3112,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "7995:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3115,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "8016:5:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3130,
                            "src": "8009:12:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 3114,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8009:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3121,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3117,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3103,
                              "src": "8037:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 3118,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3105,
                              "src": "8044:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3119,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3107,
                              "src": "8051:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3116,
                            "name": "tryParseInt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3152,
                              3194
                            ],
                            "referencedDeclaration": 3194,
                            "src": "8025:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,int256)"
                            }
                          },
                          "id": 3120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8025:30:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                            "typeString": "tuple(bool,int256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7994:61:18"
                      },
                      {
                        "condition": {
                          "id": 3123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "8069:8:18",
                          "subExpression": {
                            "id": 3122,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3113,
                            "src": "8070:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3127,
                        "nodeType": "IfStatement",
                        "src": "8065:41:18",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3124,
                              "name": "StringsInvalidChar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2601,
                              "src": "8086:18:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3125,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8086:20:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3126,
                          "nodeType": "RevertStatement",
                          "src": "8079:27:18"
                        }
                      },
                      {
                        "expression": {
                          "id": 3128,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3115,
                          "src": "8123:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3111,
                        "id": 3129,
                        "nodeType": "Return",
                        "src": "8116:12:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3101,
                    "nodeType": "StructuredDocumentation",
                    "src": "7585:296:18",
                    "text": " @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."
                  },
                  "id": 3131,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseInt",
                  "nameLocation": "7895:8:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3108,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3103,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "7918:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3131,
                        "src": "7904:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3102,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7904:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3105,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "7933:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3131,
                        "src": "7925:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3104,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7925:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3107,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "7948:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3131,
                        "src": "7940:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3106,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7940:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7903:49:18"
                  },
                  "returnParameters": {
                    "id": 3111,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3110,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3131,
                        "src": "7976:6:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3109,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7976:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7975:8:18"
                  },
                  "scope": 3940,
                  "src": "7886:249:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3151,
                    "nodeType": "Block",
                    "src": "8526:82:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3142,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3134,
                              "src": "8571:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 3143,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8578:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3146,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3134,
                                    "src": "8587:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3145,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8581:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3144,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8581:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3147,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8581:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3148,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8594:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "8581:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3141,
                            "name": "_tryParseIntUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3315,
                            "src": "8543:27:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,int256)"
                            }
                          },
                          "id": 3149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8543:58:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                            "typeString": "tuple(bool,int256)"
                          }
                        },
                        "functionReturnParameters": 3140,
                        "id": 3150,
                        "nodeType": "Return",
                        "src": "8536:65:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3132,
                    "nodeType": "StructuredDocumentation",
                    "src": "8141:287:18",
                    "text": " @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."
                  },
                  "id": 3152,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseInt",
                  "nameLocation": "8442:11:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3134,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "8468:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "8454:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3133,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8454:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8453:21:18"
                  },
                  "returnParameters": {
                    "id": 3140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3137,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "8503:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "8498:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3136,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8498:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3139,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8519:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "8512:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3138,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8512:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8497:28:18"
                  },
                  "scope": 3940,
                  "src": "8433:175:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 3157,
                  "mutability": "constant",
                  "name": "ABS_MIN_INT256",
                  "nameLocation": "8639:14:18",
                  "nodeType": "VariableDeclaration",
                  "scope": 3940,
                  "src": "8614:50:18",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8614:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const 5789...(69 digits omitted)...9968"
                    },
                    "id": 3156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "32",
                      "id": 3154,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8656:1:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "hexValue": "323535",
                      "id": 3155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8661:3:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "8656:8:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const 5789...(69 digits omitted)...9968"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3193,
                    "nodeType": "Block",
                    "src": "9130:143:18",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3177,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3171,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3164,
                              "src": "9144:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3174,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3160,
                                    "src": "9156:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3173,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9150:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3172,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9150:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3175,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9150:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9163:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "9150:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9144:25:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3178,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3162,
                              "src": "9173:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 3179,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3164,
                              "src": "9181:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9173:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "9144:40:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3186,
                        "nodeType": "IfStatement",
                        "src": "9140:63:18",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 3182,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9194:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 3183,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9201:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 3184,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "9193:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 3170,
                          "id": 3185,
                          "nodeType": "Return",
                          "src": "9186:17:18"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3188,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3160,
                              "src": "9248:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 3189,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3162,
                              "src": "9255:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3190,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3164,
                              "src": "9262:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3187,
                            "name": "_tryParseIntUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3315,
                            "src": "9220:27:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,int256)"
                            }
                          },
                          "id": 3191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9220:46:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                            "typeString": "tuple(bool,int256)"
                          }
                        },
                        "functionReturnParameters": 3170,
                        "id": 3192,
                        "nodeType": "Return",
                        "src": "9213:53:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3158,
                    "nodeType": "StructuredDocumentation",
                    "src": "8671:303:18",
                    "text": " @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character or if the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."
                  },
                  "id": 3194,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseInt",
                  "nameLocation": "8988:11:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3165,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3160,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "9023:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3194,
                        "src": "9009:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3159,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "9009:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3162,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "9046:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3194,
                        "src": "9038:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3161,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9038:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3164,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "9069:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3194,
                        "src": "9061:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3163,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9061:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8999:79:18"
                  },
                  "returnParameters": {
                    "id": 3170,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3167,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "9107:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3194,
                        "src": "9102:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3166,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9102:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3169,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9123:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3194,
                        "src": "9116:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3168,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9116:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9101:28:18"
                  },
                  "scope": 3940,
                  "src": "8979:294:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3314,
                    "nodeType": "Block",
                    "src": "9673:812:18",
                    "statements": [
                      {
                        "assignments": [
                          3209
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3209,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "9696:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3314,
                            "src": "9683:19:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3208,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "9683:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3214,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3212,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3197,
                              "src": "9711:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9705:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 3210,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "9705:5:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9705:12:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9683:34:18"
                      },
                      {
                        "assignments": [
                          3216
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3216,
                            "mutability": "mutable",
                            "name": "sign",
                            "nameLocation": "9781:4:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3314,
                            "src": "9774:11:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            },
                            "typeName": {
                              "id": 3215,
                              "name": "bytes1",
                              "nodeType": "ElementaryTypeName",
                              "src": "9774:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3232,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3217,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3199,
                              "src": "9788:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 3218,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3201,
                              "src": "9797:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9788:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 3227,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3209,
                                    "src": "9845:6:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "id": 3228,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3199,
                                    "src": "9853:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3226,
                                  "name": "_unsafeReadBytesOffset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3939,
                                  "src": "9822:22:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                  }
                                },
                                "id": 3229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9822:37:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 3225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9815:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 3224,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "9815:6:18",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9815:45:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "id": 3231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "9788:72:18",
                          "trueExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3222,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9810:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 3221,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9803:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 3220,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "9803:6:18",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9803:9:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9774:86:18"
                      },
                      {
                        "assignments": [
                          3234
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3234,
                            "mutability": "mutable",
                            "name": "positiveSign",
                            "nameLocation": "9946:12:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3314,
                            "src": "9941:17:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3233,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "9941:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3241,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          },
                          "id": 3240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3235,
                            "name": "sign",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3216,
                            "src": "9961:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "2b",
                                "id": 3238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9976:3:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8",
                                  "typeString": "literal_string \"+\""
                                },
                                "value": "+"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8",
                                  "typeString": "literal_string \"+\""
                                }
                              ],
                              "id": 3237,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9969:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 3236,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "9969:6:18",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9969:11:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "9961:19:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9941:39:18"
                      },
                      {
                        "assignments": [
                          3243
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3243,
                            "mutability": "mutable",
                            "name": "negativeSign",
                            "nameLocation": "9995:12:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3314,
                            "src": "9990:17:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3242,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "9990:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3250,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          },
                          "id": 3249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3244,
                            "name": "sign",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3216,
                            "src": "10010:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "2d",
                                "id": 3247,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10025:3:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
                                  "typeString": "literal_string \"-\""
                                },
                                "value": "-"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
                                  "typeString": "literal_string \"-\""
                                }
                              ],
                              "id": 3246,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10018:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 3245,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "10018:6:18",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3248,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10018:11:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "10010:19:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9990:39:18"
                      },
                      {
                        "assignments": [
                          3252
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3252,
                            "mutability": "mutable",
                            "name": "offset",
                            "nameLocation": "10047:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3314,
                            "src": "10039:14:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3251,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10039:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3259,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 3255,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3253,
                                    "name": "positiveSign",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3234,
                                    "src": "10057:12:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "id": 3254,
                                    "name": "negativeSign",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3243,
                                    "src": "10073:12:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "10057:28:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 3256,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10056:30:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 3257,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10087:6:18",
                            "memberName": "toUint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8474,
                            "src": "10056:37:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$",
                              "typeString": "function (bool) pure returns (uint256)"
                            }
                          },
                          "id": 3258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10056:39:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10039:56:18"
                      },
                      {
                        "assignments": [
                          3261,
                          3263
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3261,
                            "mutability": "mutable",
                            "name": "absSuccess",
                            "nameLocation": "10112:10:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3314,
                            "src": "10107:15:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3260,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "10107:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3263,
                            "mutability": "mutable",
                            "name": "absValue",
                            "nameLocation": "10132:8:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3314,
                            "src": "10124:16:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3262,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10124:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3271,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3265,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3197,
                              "src": "10157:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3268,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3266,
                                "name": "begin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3199,
                                "src": "10164:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 3267,
                                "name": "offset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3252,
                                "src": "10172:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10164:14:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3269,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3201,
                              "src": "10180:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3264,
                            "name": "tryParseUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2974,
                              3011
                            ],
                            "referencedDeclaration": 3011,
                            "src": "10144:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 3270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10144:40:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10106:78:18"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3272,
                            "name": "absSuccess",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3261,
                            "src": "10199:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3275,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3273,
                              "name": "absValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3263,
                              "src": "10213:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 3274,
                              "name": "ABS_MIN_INT256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3157,
                              "src": "10224:14:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10213:25:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10199:39:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 3298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3292,
                                "name": "absSuccess",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3261,
                                "src": "10341:10:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "id": 3293,
                                "name": "negativeSign",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3243,
                                "src": "10355:12:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "10341:26:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3297,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3295,
                                "name": "absValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3263,
                                "src": "10371:8:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 3296,
                                "name": "ABS_MIN_INT256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3157,
                                "src": "10383:14:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10371:26:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "10341:56:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "expression": {
                              "components": [
                                {
                                  "hexValue": "66616c7365",
                                  "id": 3308,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10469:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                {
                                  "hexValue": "30",
                                  "id": 3309,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10476:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "id": 3310,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10468:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                                "typeString": "tuple(bool,int_const 0)"
                              }
                            },
                            "functionReturnParameters": 3207,
                            "id": 3311,
                            "nodeType": "Return",
                            "src": "10461:17:18"
                          },
                          "id": 3312,
                          "nodeType": "IfStatement",
                          "src": "10337:141:18",
                          "trueBody": {
                            "id": 3307,
                            "nodeType": "Block",
                            "src": "10399:56:18",
                            "statements": [
                              {
                                "expression": {
                                  "components": [
                                    {
                                      "hexValue": "74727565",
                                      "id": 3299,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10421:4:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3302,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "10432:6:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_int256_$",
                                              "typeString": "type(int256)"
                                            },
                                            "typeName": {
                                              "id": 3301,
                                              "name": "int256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "10432:6:18",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_type$_t_int256_$",
                                              "typeString": "type(int256)"
                                            }
                                          ],
                                          "id": 3300,
                                          "name": "type",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -27,
                                          "src": "10427:4:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 3303,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10427:12:18",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_meta_type_t_int256",
                                          "typeString": "type(int256)"
                                        }
                                      },
                                      "id": 3304,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "10440:3:18",
                                      "memberName": "min",
                                      "nodeType": "MemberAccess",
                                      "src": "10427:16:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 3305,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10420:24:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                                    "typeString": "tuple(bool,int256)"
                                  }
                                },
                                "functionReturnParameters": 3207,
                                "id": 3306,
                                "nodeType": "Return",
                                "src": "10413:31:18"
                              }
                            ]
                          }
                        },
                        "id": 3313,
                        "nodeType": "IfStatement",
                        "src": "10195:283:18",
                        "trueBody": {
                          "id": 3291,
                          "nodeType": "Block",
                          "src": "10240:91:18",
                          "statements": [
                            {
                              "expression": {
                                "components": [
                                  {
                                    "hexValue": "74727565",
                                    "id": 3277,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10262:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  {
                                    "condition": {
                                      "id": 3278,
                                      "name": "negativeSign",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3243,
                                      "src": "10268:12:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "arguments": [
                                        {
                                          "id": 3286,
                                          "name": "absValue",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3263,
                                          "src": "10310:8:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3285,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "10303:6:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_int256_$",
                                          "typeString": "type(int256)"
                                        },
                                        "typeName": {
                                          "id": 3284,
                                          "name": "int256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "10303:6:18",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3287,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10303:16:18",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "id": 3288,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "10268:51:18",
                                    "trueExpression": {
                                      "id": 3283,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "-",
                                      "prefix": true,
                                      "src": "10283:17:18",
                                      "subExpression": {
                                        "arguments": [
                                          {
                                            "id": 3281,
                                            "name": "absValue",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3263,
                                            "src": "10291:8:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 3280,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "10284:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_int256_$",
                                            "typeString": "type(int256)"
                                          },
                                          "typeName": {
                                            "id": 3279,
                                            "name": "int256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "10284:6:18",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 3282,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10284:16:18",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 3289,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "10261:59:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                                  "typeString": "tuple(bool,int256)"
                                }
                              },
                              "functionReturnParameters": 3207,
                              "id": 3290,
                              "nodeType": "Return",
                              "src": "10254:66:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3195,
                    "nodeType": "StructuredDocumentation",
                    "src": "9279:223:18",
                    "text": " @dev Implementation of {tryParseInt-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."
                  },
                  "id": 3315,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseIntUncheckedBounds",
                  "nameLocation": "9516:27:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3197,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "9567:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3315,
                        "src": "9553:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3196,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "9553:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3199,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "9590:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3315,
                        "src": "9582:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3198,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9582:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3201,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "9613:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3315,
                        "src": "9605:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9605:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9543:79:18"
                  },
                  "returnParameters": {
                    "id": 3207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3204,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "9650:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3315,
                        "src": "9645:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3203,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9645:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3206,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9666:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3315,
                        "src": "9659:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3205,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9659:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9644:28:18"
                  },
                  "scope": 3940,
                  "src": "9507:978:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3333,
                    "nodeType": "Block",
                    "src": "10830:67:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3324,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3318,
                              "src": "10860:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 3325,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10867:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3328,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3318,
                                    "src": "10876:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3327,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10870:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3326,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10870:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3329,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10870:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "10883:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "10870:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3323,
                            "name": "parseHexUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3334,
                              3365
                            ],
                            "referencedDeclaration": 3365,
                            "src": "10847:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 3331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10847:43:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3322,
                        "id": 3332,
                        "nodeType": "Return",
                        "src": "10840:50:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3316,
                    "nodeType": "StructuredDocumentation",
                    "src": "10491:259:18",
                    "text": " @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."
                  },
                  "id": 3334,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseHexUint",
                  "nameLocation": "10764:12:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3319,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3318,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "10791:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3334,
                        "src": "10777:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3317,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "10777:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10776:21:18"
                  },
                  "returnParameters": {
                    "id": 3322,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3321,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3334,
                        "src": "10821:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3320,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10821:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10820:9:18"
                  },
                  "scope": 3940,
                  "src": "10755:142:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3364,
                    "nodeType": "Block",
                    "src": "11318:156:18",
                    "statements": [
                      {
                        "assignments": [
                          3347,
                          3349
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3347,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "11334:7:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3364,
                            "src": "11329:12:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3346,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "11329:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3349,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "11351:5:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3364,
                            "src": "11343:13:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3348,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11343:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3355,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3351,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3337,
                              "src": "11376:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 3352,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3339,
                              "src": "11383:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3353,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3341,
                              "src": "11390:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3350,
                            "name": "tryParseHexUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3386,
                              3423
                            ],
                            "referencedDeclaration": 3423,
                            "src": "11360:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 3354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11360:34:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11328:66:18"
                      },
                      {
                        "condition": {
                          "id": 3357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "11408:8:18",
                          "subExpression": {
                            "id": 3356,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3347,
                            "src": "11409:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3361,
                        "nodeType": "IfStatement",
                        "src": "11404:41:18",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3358,
                              "name": "StringsInvalidChar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2601,
                              "src": "11425:18:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3359,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11425:20:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3360,
                          "nodeType": "RevertStatement",
                          "src": "11418:27:18"
                        }
                      },
                      {
                        "expression": {
                          "id": 3362,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3349,
                          "src": "11462:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3345,
                        "id": 3363,
                        "nodeType": "Return",
                        "src": "11455:12:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3335,
                    "nodeType": "StructuredDocumentation",
                    "src": "10903:307:18",
                    "text": " @dev Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."
                  },
                  "id": 3365,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseHexUint",
                  "nameLocation": "11224:12:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3342,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3337,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "11251:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3365,
                        "src": "11237:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3336,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "11237:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3339,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "11266:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3365,
                        "src": "11258:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3338,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11258:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3341,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "11281:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3365,
                        "src": "11273:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3340,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11273:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11236:49:18"
                  },
                  "returnParameters": {
                    "id": 3345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3344,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3365,
                        "src": "11309:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11309:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11308:9:18"
                  },
                  "scope": 3940,
                  "src": "11215:259:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3385,
                    "nodeType": "Block",
                    "src": "11801:86:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3376,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3368,
                              "src": "11850:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 3377,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11857:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3380,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3368,
                                    "src": "11866:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3379,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11860:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3378,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11860:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3381,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11860:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3382,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11873:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "11860:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3375,
                            "name": "_tryParseHexUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3526,
                            "src": "11818:31:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 3383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11818:62:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 3374,
                        "id": 3384,
                        "nodeType": "Return",
                        "src": "11811:69:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3366,
                    "nodeType": "StructuredDocumentation",
                    "src": "11480:218:18",
                    "text": " @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 3386,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseHexUint",
                  "nameLocation": "11712:15:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3368,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "11742:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3386,
                        "src": "11728:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3367,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "11728:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11727:21:18"
                  },
                  "returnParameters": {
                    "id": 3374,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3371,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "11777:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3386,
                        "src": "11772:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3370,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "11772:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3373,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11794:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3386,
                        "src": "11786:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3372,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11786:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11771:29:18"
                  },
                  "scope": 3940,
                  "src": "11703:184:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3422,
                    "nodeType": "Block",
                    "src": "12295:147:18",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3406,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3400,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3393,
                              "src": "12309:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3403,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3389,
                                    "src": "12321:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3402,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "12315:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3401,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12315:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3404,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12315:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3405,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12328:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "12315:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12309:25:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3409,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3407,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3391,
                              "src": "12338:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 3408,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3393,
                              "src": "12346:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12338:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "12309:40:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3415,
                        "nodeType": "IfStatement",
                        "src": "12305:63:18",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 3411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12359:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 3412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12366:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 3413,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12358:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 3399,
                          "id": 3414,
                          "nodeType": "Return",
                          "src": "12351:17:18"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3417,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3389,
                              "src": "12417:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 3418,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3391,
                              "src": "12424:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3419,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3393,
                              "src": "12431:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3416,
                            "name": "_tryParseHexUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3526,
                            "src": "12385:31:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 3420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12385:50:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 3399,
                        "id": 3421,
                        "nodeType": "Return",
                        "src": "12378:57:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3387,
                    "nodeType": "StructuredDocumentation",
                    "src": "11893:241:18",
                    "text": " @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 3423,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseHexUint",
                  "nameLocation": "12148:15:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3394,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3389,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "12187:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3423,
                        "src": "12173:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3388,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "12173:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3391,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "12210:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3423,
                        "src": "12202:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3390,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12202:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3393,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "12233:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3423,
                        "src": "12225:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3392,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12225:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12163:79:18"
                  },
                  "returnParameters": {
                    "id": 3399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3396,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "12271:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3423,
                        "src": "12266:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3395,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12266:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3398,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12288:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3423,
                        "src": "12280:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12280:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12265:29:18"
                  },
                  "scope": 3940,
                  "src": "12139:303:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3525,
                    "nodeType": "Block",
                    "src": "12851:881:18",
                    "statements": [
                      {
                        "assignments": [
                          3438
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3438,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "12874:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3525,
                            "src": "12861:19:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3437,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "12861:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3443,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3441,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3426,
                              "src": "12889:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12883:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 3439,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "12883:5:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12883:12:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12861:34:18"
                      },
                      {
                        "assignments": [
                          3445
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3445,
                            "mutability": "mutable",
                            "name": "hasPrefix",
                            "nameLocation": "12948:9:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3525,
                            "src": "12943:14:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3444,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "12943:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3465,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3446,
                                  "name": "end",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3430,
                                  "src": "12961:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3449,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3447,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3428,
                                    "src": "12967:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 3448,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12975:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12967:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12961:15:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 3451,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12960:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes2",
                              "typeString": "bytes2"
                            },
                            "id": 3463,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 3455,
                                      "name": "buffer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3438,
                                      "src": "13011:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    {
                                      "id": 3456,
                                      "name": "begin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3428,
                                      "src": "13019:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 3454,
                                    "name": "_unsafeReadBytesOffset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3939,
                                    "src": "12988:22:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 3457,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12988:37:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 3453,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12981:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 3452,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12981:6:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3458,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12981:45:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "3078",
                                  "id": 3461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13037:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  },
                                  "value": "0x"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  }
                                ],
                                "id": 3460,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13030:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 3459,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13030:6:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3462,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13030:12:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "src": "12981:61:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "12960:82:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12943:99:18"
                      },
                      {
                        "assignments": [
                          3467
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3467,
                            "mutability": "mutable",
                            "name": "offset",
                            "nameLocation": "13131:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3525,
                            "src": "13123:14:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3466,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13123:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3473,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 3468,
                                "name": "hasPrefix",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3445,
                                "src": "13140:9:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "13150:6:18",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8474,
                              "src": "13140:16:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 3470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13140:18:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 3471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13161:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "13140:22:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13123:39:18"
                      },
                      {
                        "assignments": [
                          3475
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3475,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "13181:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3525,
                            "src": "13173:14:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3474,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13173:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3477,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13190:1:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13173:18:18"
                      },
                      {
                        "body": {
                          "id": 3519,
                          "nodeType": "Block",
                          "src": "13248:447:18",
                          "statements": [
                            {
                              "assignments": [
                                3491
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3491,
                                  "mutability": "mutable",
                                  "name": "chr",
                                  "nameLocation": "13268:3:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3519,
                                  "src": "13262:9:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "typeName": {
                                    "id": 3490,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13262:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3501,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 3496,
                                            "name": "buffer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3438,
                                            "src": "13317:6:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          {
                                            "id": 3497,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3479,
                                            "src": "13325:1:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 3495,
                                          "name": "_unsafeReadBytesOffset",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3939,
                                          "src": "13294:22:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 3498,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "13294:33:18",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 3494,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "13287:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bytes1_$",
                                        "typeString": "type(bytes1)"
                                      },
                                      "typeName": {
                                        "id": 3493,
                                        "name": "bytes1",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13287:6:18",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3499,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13287:41:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  ],
                                  "id": 3492,
                                  "name": "_tryParseChr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3761,
                                  "src": "13274:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$",
                                    "typeString": "function (bytes1) pure returns (uint8)"
                                  }
                                },
                                "id": 3500,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13274:55:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13262:67:18"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 3504,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3502,
                                  "name": "chr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3491,
                                  "src": "13347:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "3135",
                                  "id": 3503,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13353:2:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "15"
                                },
                                "src": "13347:8:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3509,
                              "nodeType": "IfStatement",
                              "src": "13343:31:18",
                              "trueBody": {
                                "expression": {
                                  "components": [
                                    {
                                      "hexValue": "66616c7365",
                                      "id": 3505,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "13365:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    {
                                      "hexValue": "30",
                                      "id": 3506,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "13372:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "id": 3507,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "13364:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                                    "typeString": "tuple(bool,int_const 0)"
                                  }
                                },
                                "functionReturnParameters": 3436,
                                "id": 3508,
                                "nodeType": "Return",
                                "src": "13357:17:18"
                              }
                            },
                            {
                              "expression": {
                                "id": 3512,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3510,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3475,
                                  "src": "13388:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "*=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 3511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13398:2:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "13388:12:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3513,
                              "nodeType": "ExpressionStatement",
                              "src": "13388:12:18"
                            },
                            {
                              "id": 3518,
                              "nodeType": "UncheckedBlock",
                              "src": "13414:271:18",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 3516,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 3514,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3475,
                                      "src": "13657:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "id": 3515,
                                      "name": "chr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3491,
                                      "src": "13667:3:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "13657:13:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3517,
                                  "nodeType": "ExpressionStatement",
                                  "src": "13657:13:18"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3484,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3479,
                            "src": "13234:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 3485,
                            "name": "end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3430,
                            "src": "13238:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13234:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3520,
                        "initializationExpression": {
                          "assignments": [
                            3479
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3479,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "13214:1:18",
                              "nodeType": "VariableDeclaration",
                              "scope": 3520,
                              "src": "13206:9:18",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3478,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13206:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3483,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3482,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3480,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3428,
                              "src": "13218:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 3481,
                              "name": "offset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3467,
                              "src": "13226:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13218:14:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13206:26:18"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 3488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "13243:3:18",
                            "subExpression": {
                              "id": 3487,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3479,
                              "src": "13245:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3489,
                          "nodeType": "ExpressionStatement",
                          "src": "13243:3:18"
                        },
                        "nodeType": "ForStatement",
                        "src": "13201:494:18"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 3521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13712:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 3522,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3475,
                              "src": "13718:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3523,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13711:14:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 3436,
                        "id": 3524,
                        "nodeType": "Return",
                        "src": "13704:21:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3424,
                    "nodeType": "StructuredDocumentation",
                    "src": "12448:227:18",
                    "text": " @dev Implementation of {tryParseHexUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."
                  },
                  "id": 3526,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseHexUintUncheckedBounds",
                  "nameLocation": "12689:31:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3431,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3426,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "12744:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3526,
                        "src": "12730:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3425,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "12730:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3428,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "12767:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3526,
                        "src": "12759:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3427,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12759:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3430,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "12790:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3526,
                        "src": "12782:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3429,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12782:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12720:79:18"
                  },
                  "returnParameters": {
                    "id": 3436,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3433,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "12827:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3526,
                        "src": "12822:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3432,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12822:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3435,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12844:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3526,
                        "src": "12836:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3434,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12836:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12821:29:18"
                  },
                  "scope": 3940,
                  "src": "12680:1052:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3544,
                    "nodeType": "Block",
                    "src": "14030:67:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3535,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3529,
                              "src": "14060:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 3536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14067:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3539,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3529,
                                    "src": "14076:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14070:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3537,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14070:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14070:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14083:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "14070:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3534,
                            "name": "parseAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3545,
                              3576
                            ],
                            "referencedDeclaration": 3576,
                            "src": "14047:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (address)"
                            }
                          },
                          "id": 3542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14047:43:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 3533,
                        "id": 3543,
                        "nodeType": "Return",
                        "src": "14040:50:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3527,
                    "nodeType": "StructuredDocumentation",
                    "src": "13738:212:18",
                    "text": " @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`"
                  },
                  "id": 3545,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseAddress",
                  "nameLocation": "13964:12:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3530,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3529,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "13991:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3545,
                        "src": "13977:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3528,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "13977:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13976:21:18"
                  },
                  "returnParameters": {
                    "id": 3533,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3532,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3545,
                        "src": "14021:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3531,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14021:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14020:9:18"
                  },
                  "scope": 3940,
                  "src": "13955:142:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3575,
                    "nodeType": "Block",
                    "src": "14470:165:18",
                    "statements": [
                      {
                        "assignments": [
                          3558,
                          3560
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3558,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "14486:7:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3575,
                            "src": "14481:12:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3557,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "14481:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3560,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "14503:5:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3575,
                            "src": "14495:13:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3559,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "14495:7:18",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3566,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3562,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3548,
                              "src": "14528:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 3563,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3550,
                              "src": "14535:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3564,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3552,
                              "src": "14542:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3561,
                            "name": "tryParseAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3597,
                              3701
                            ],
                            "referencedDeclaration": 3701,
                            "src": "14512:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,address)"
                            }
                          },
                          "id": 3565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14512:34:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                            "typeString": "tuple(bool,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14480:66:18"
                      },
                      {
                        "condition": {
                          "id": 3568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "14560:8:18",
                          "subExpression": {
                            "id": 3567,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3558,
                            "src": "14561:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3572,
                        "nodeType": "IfStatement",
                        "src": "14556:50:18",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3569,
                              "name": "StringsInvalidAddressFormat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2604,
                              "src": "14577:27:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14577:29:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3571,
                          "nodeType": "RevertStatement",
                          "src": "14570:36:18"
                        }
                      },
                      {
                        "expression": {
                          "id": 3573,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3560,
                          "src": "14623:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 3556,
                        "id": 3574,
                        "nodeType": "Return",
                        "src": "14616:12:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3546,
                    "nodeType": "StructuredDocumentation",
                    "src": "14103:259:18",
                    "text": " @dev Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`"
                  },
                  "id": 3576,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseAddress",
                  "nameLocation": "14376:12:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3553,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3548,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "14403:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3576,
                        "src": "14389:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3547,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "14389:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3550,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "14418:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3576,
                        "src": "14410:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3549,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14410:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3552,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "14433:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3576,
                        "src": "14425:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3551,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14425:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14388:49:18"
                  },
                  "returnParameters": {
                    "id": 3556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3555,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3576,
                        "src": "14461:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3554,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14461:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14460:9:18"
                  },
                  "scope": 3940,
                  "src": "14367:268:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3596,
                    "nodeType": "Block",
                    "src": "14942:70:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3587,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3579,
                              "src": "14975:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 3588,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14982:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3591,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3579,
                                    "src": "14991:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3590,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14985:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3589,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14985:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14985:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14998:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "14985:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3586,
                            "name": "tryParseAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3597,
                              3701
                            ],
                            "referencedDeclaration": 3701,
                            "src": "14959:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,address)"
                            }
                          },
                          "id": 3594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14959:46:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                            "typeString": "tuple(bool,address)"
                          }
                        },
                        "functionReturnParameters": 3585,
                        "id": 3595,
                        "nodeType": "Return",
                        "src": "14952:53:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3577,
                    "nodeType": "StructuredDocumentation",
                    "src": "14641:198:18",
                    "text": " @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n formatted address. See {parseAddress-string} requirements."
                  },
                  "id": 3597,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseAddress",
                  "nameLocation": "14853:15:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3580,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3579,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "14883:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3597,
                        "src": "14869:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3578,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "14869:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14868:21:18"
                  },
                  "returnParameters": {
                    "id": 3585,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3582,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "14918:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3597,
                        "src": "14913:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3581,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "14913:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3584,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "14935:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3597,
                        "src": "14927:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3583,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14927:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14912:29:18"
                  },
                  "scope": 3940,
                  "src": "14844:168:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3700,
                    "nodeType": "Block",
                    "src": "15405:733:18",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3611,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3604,
                              "src": "15419:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3614,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3600,
                                    "src": "15431:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15425:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3612,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15425:5:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15425:12:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3616,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15438:6:18",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "15425:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15419:25:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3618,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3602,
                              "src": "15448:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 3619,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3604,
                              "src": "15456:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15448:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "15419:40:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3629,
                        "nodeType": "IfStatement",
                        "src": "15415:72:18",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 3622,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15469:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 3625,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15484:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 3624,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15476:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3623,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15476:7:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15476:10:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "id": 3627,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "15468:19:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                              "typeString": "tuple(bool,address)"
                            }
                          },
                          "functionReturnParameters": 3610,
                          "id": 3628,
                          "nodeType": "Return",
                          "src": "15461:26:18"
                        }
                      },
                      {
                        "assignments": [
                          3631
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3631,
                            "mutability": "mutable",
                            "name": "hasPrefix",
                            "nameLocation": "15503:9:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3700,
                            "src": "15498:14:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3630,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "15498:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3654,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3636,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3632,
                                  "name": "end",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3604,
                                  "src": "15516:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3635,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3633,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3602,
                                    "src": "15522:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 3634,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15530:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "15522:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15516:15:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 3637,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "15515:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes2",
                              "typeString": "bytes2"
                            },
                            "id": 3652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 3643,
                                          "name": "input",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3600,
                                          "src": "15572:5:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 3642,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15566:5:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                          "typeString": "type(bytes storage pointer)"
                                        },
                                        "typeName": {
                                          "id": 3641,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "15566:5:18",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3644,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15566:12:18",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    {
                                      "id": 3645,
                                      "name": "begin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3602,
                                      "src": "15580:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 3640,
                                    "name": "_unsafeReadBytesOffset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3939,
                                    "src": "15543:22:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 3646,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15543:43:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 3639,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15536:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 3638,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15536:6:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15536:51:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "3078",
                                  "id": 3650,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "15598:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  },
                                  "value": "0x"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  }
                                ],
                                "id": 3649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15591:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 3648,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15591:6:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15591:12:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "src": "15536:67:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "15515:88:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15498:105:18"
                      },
                      {
                        "assignments": [
                          3656
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3656,
                            "mutability": "mutable",
                            "name": "expectedLength",
                            "nameLocation": "15692:14:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3700,
                            "src": "15684:22:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3655,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "15684:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3664,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3663,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "3430",
                            "id": 3657,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15709:2:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_40_by_1",
                              "typeString": "int_const 40"
                            },
                            "value": "40"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 3658,
                                  "name": "hasPrefix",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3631,
                                  "src": "15714:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "id": 3659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "15724:6:18",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "15714:16:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 3660,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15714:18:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 3661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15735:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "15714:22:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15709:27:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15684:52:18"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3665,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3604,
                              "src": "15801:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 3666,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3602,
                              "src": "15807:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15801:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 3668,
                            "name": "expectedLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3656,
                            "src": "15816:14:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15801:29:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3698,
                          "nodeType": "Block",
                          "src": "16081:51:18",
                          "statements": [
                            {
                              "expression": {
                                "components": [
                                  {
                                    "hexValue": "66616c7365",
                                    "id": 3691,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16103:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 3694,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16118:1:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 3693,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "16110:7:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 3692,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16110:7:18",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3695,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16110:10:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "id": 3696,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "16102:19:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                                  "typeString": "tuple(bool,address)"
                                }
                              },
                              "functionReturnParameters": 3610,
                              "id": 3697,
                              "nodeType": "Return",
                              "src": "16095:26:18"
                            }
                          ]
                        },
                        "id": 3699,
                        "nodeType": "IfStatement",
                        "src": "15797:335:18",
                        "trueBody": {
                          "id": 3690,
                          "nodeType": "Block",
                          "src": "15832:243:18",
                          "statements": [
                            {
                              "assignments": [
                                3671,
                                3673
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3671,
                                  "mutability": "mutable",
                                  "name": "s",
                                  "nameLocation": "15953:1:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3690,
                                  "src": "15948:6:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 3670,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15948:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 3673,
                                  "mutability": "mutable",
                                  "name": "v",
                                  "nameLocation": "15964:1:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3690,
                                  "src": "15956:9:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3672,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15956:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3679,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 3675,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3600,
                                    "src": "16001:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "id": 3676,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3602,
                                    "src": "16008:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3677,
                                    "name": "end",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3604,
                                    "src": "16015:3:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3674,
                                  "name": "_tryParseHexUintUncheckedBounds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3526,
                                  "src": "15969:31:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                                    "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                                  }
                                },
                                "id": 3678,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15969:50:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                                  "typeString": "tuple(bool,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15947:72:18"
                            },
                            {
                              "expression": {
                                "components": [
                                  {
                                    "id": 3680,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3671,
                                    "src": "16041:1:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 3685,
                                            "name": "v",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3673,
                                            "src": "16060:1:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 3684,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "16052:7:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint160_$",
                                            "typeString": "type(uint160)"
                                          },
                                          "typeName": {
                                            "id": 3683,
                                            "name": "uint160",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "16052:7:18",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 3686,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "16052:10:18",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      ],
                                      "id": 3682,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "16044:7:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 3681,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16044:7:18",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3687,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16044:19:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "id": 3688,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "16040:24:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                                  "typeString": "tuple(bool,address)"
                                }
                              },
                              "functionReturnParameters": 3610,
                              "id": 3689,
                              "nodeType": "Return",
                              "src": "16033:31:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3598,
                    "nodeType": "StructuredDocumentation",
                    "src": "15018:226:18",
                    "text": " @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n formatted address. See {parseAddress-string-uint256-uint256} requirements."
                  },
                  "id": 3701,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseAddress",
                  "nameLocation": "15258:15:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3600,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "15297:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "15283:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3599,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "15283:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3602,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "15320:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "15312:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3601,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15312:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3604,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "15343:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "15335:11:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3603,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15335:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15273:79:18"
                  },
                  "returnParameters": {
                    "id": 3610,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3607,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "15381:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "15376:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3606,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "15376:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3609,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "15398:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "15390:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3608,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15390:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15375:29:18"
                  },
                  "scope": 3940,
                  "src": "15249:889:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3760,
                    "nodeType": "Block",
                    "src": "16207:461:18",
                    "statements": [
                      {
                        "assignments": [
                          3709
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3709,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "16223:5:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3760,
                            "src": "16217:11:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 3708,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "16217:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3714,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3712,
                              "name": "chr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3703,
                              "src": "16237:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            ],
                            "id": 3711,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16231:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 3710,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "16231:5:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16231:10:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16217:24:18"
                      },
                      {
                        "id": 3757,
                        "nodeType": "UncheckedBlock",
                        "src": "16401:238:18",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 3717,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3715,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3709,
                                  "src": "16429:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "3437",
                                  "id": 3716,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16437:2:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_47_by_1",
                                    "typeString": "int_const 47"
                                  },
                                  "value": "47"
                                },
                                "src": "16429:10:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 3720,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3718,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3709,
                                  "src": "16443:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3538",
                                  "id": 3719,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16451:2:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_58_by_1",
                                    "typeString": "int_const 58"
                                  },
                                  "value": "58"
                                },
                                "src": "16443:10:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "16429:24:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 3728,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3726,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3709,
                                    "src": "16489:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "3936",
                                    "id": 3727,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16497:2:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  "src": "16489:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 3731,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3729,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3709,
                                    "src": "16503:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "hexValue": "313033",
                                    "id": 3730,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16511:3:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_103_by_1",
                                      "typeString": "int_const 103"
                                    },
                                    "value": "103"
                                  },
                                  "src": "16503:11:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "16489:25:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 3743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 3739,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 3737,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3709,
                                      "src": "16550:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "3634",
                                      "id": 3738,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16558:2:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "16550:10:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 3742,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 3740,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3709,
                                      "src": "16564:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "hexValue": "3731",
                                      "id": 3741,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16572:2:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_71_by_1",
                                        "typeString": "int_const 71"
                                      },
                                      "value": "71"
                                    },
                                    "src": "16564:10:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "16550:24:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "expression": {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3750,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "16618:5:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint8_$",
                                            "typeString": "type(uint8)"
                                          },
                                          "typeName": {
                                            "id": 3749,
                                            "name": "uint8",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "16618:5:18",
                                            "typeDescriptions": {}
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_uint8_$",
                                            "typeString": "type(uint8)"
                                          }
                                        ],
                                        "id": 3748,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -27,
                                        "src": "16613:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 3751,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "16613:11:18",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_uint8",
                                        "typeString": "type(uint8)"
                                      }
                                    },
                                    "id": 3752,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "16625:3:18",
                                    "memberName": "max",
                                    "nodeType": "MemberAccess",
                                    "src": "16613:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "functionReturnParameters": 3707,
                                  "id": 3753,
                                  "nodeType": "Return",
                                  "src": "16606:22:18"
                                },
                                "id": 3754,
                                "nodeType": "IfStatement",
                                "src": "16546:82:18",
                                "trueBody": {
                                  "expression": {
                                    "id": 3746,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 3744,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3709,
                                      "src": "16576:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "-=",
                                    "rightHandSide": {
                                      "hexValue": "3535",
                                      "id": 3745,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16585:2:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_55_by_1",
                                        "typeString": "int_const 55"
                                      },
                                      "value": "55"
                                    },
                                    "src": "16576:11:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 3747,
                                  "nodeType": "ExpressionStatement",
                                  "src": "16576:11:18"
                                }
                              },
                              "id": 3755,
                              "nodeType": "IfStatement",
                              "src": "16485:143:18",
                              "trueBody": {
                                "expression": {
                                  "id": 3735,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 3733,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3709,
                                    "src": "16516:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "-=",
                                  "rightHandSide": {
                                    "hexValue": "3837",
                                    "id": 3734,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16525:2:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_87_by_1",
                                      "typeString": "int_const 87"
                                    },
                                    "value": "87"
                                  },
                                  "src": "16516:11:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "id": 3736,
                                "nodeType": "ExpressionStatement",
                                "src": "16516:11:18"
                              }
                            },
                            "id": 3756,
                            "nodeType": "IfStatement",
                            "src": "16425:203:18",
                            "trueBody": {
                              "expression": {
                                "id": 3724,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3722,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3709,
                                  "src": "16455:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "3438",
                                  "id": 3723,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16464:2:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_48_by_1",
                                    "typeString": "int_const 48"
                                  },
                                  "value": "48"
                                },
                                "src": "16455:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 3725,
                              "nodeType": "ExpressionStatement",
                              "src": "16455:11:18"
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 3758,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3709,
                          "src": "16656:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 3707,
                        "id": 3759,
                        "nodeType": "Return",
                        "src": "16649:12:18"
                      }
                    ]
                  },
                  "id": 3761,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseChr",
                  "nameLocation": "16153:12:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3703,
                        "mutability": "mutable",
                        "name": "chr",
                        "nameLocation": "16173:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3761,
                        "src": "16166:10:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes1",
                          "typeString": "bytes1"
                        },
                        "typeName": {
                          "id": 3702,
                          "name": "bytes1",
                          "nodeType": "ElementaryTypeName",
                          "src": "16166:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16165:12:18"
                  },
                  "returnParameters": {
                    "id": 3707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3706,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3761,
                        "src": "16200:5:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3705,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "16200:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16199:7:18"
                  },
                  "scope": 3940,
                  "src": "16144:524:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3926,
                    "nodeType": "Block",
                    "src": "17334:1331:18",
                    "statements": [
                      {
                        "assignments": [
                          3770
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3770,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "17357:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3926,
                            "src": "17344:19:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3769,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17344:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3775,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3773,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3764,
                              "src": "17372:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17366:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 3771,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17366:5:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17366:12:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17344:34:18"
                      },
                      {
                        "assignments": [
                          3777
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3777,
                            "mutability": "mutable",
                            "name": "output",
                            "nameLocation": "17401:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3926,
                            "src": "17388:19:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3776,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17388:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3785,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "32",
                                "id": 3780,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17420:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "expression": {
                                  "id": 3781,
                                  "name": "buffer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3770,
                                  "src": "17424:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 3782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "17431:6:18",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "17424:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "17420:17:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "17410:9:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 3778,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17414:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 3784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17410:28:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17388:50:18"
                      },
                      {
                        "assignments": [
                          3787
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3787,
                            "mutability": "mutable",
                            "name": "outputLength",
                            "nameLocation": "17479:12:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 3926,
                            "src": "17471:20:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3786,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17471:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3789,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 3788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17494:1:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17471:24:18"
                      },
                      {
                        "body": {
                          "id": 3918,
                          "nodeType": "Block",
                          "src": "17546:854:18",
                          "statements": [
                            {
                              "assignments": [
                                3801
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3801,
                                  "mutability": "mutable",
                                  "name": "char",
                                  "nameLocation": "17567:4:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3918,
                                  "src": "17560:11:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  },
                                  "typeName": {
                                    "id": 3800,
                                    "name": "bytes1",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17560:6:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3809,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 3805,
                                        "name": "buffer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3770,
                                        "src": "17604:6:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "id": 3806,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3791,
                                        "src": "17612:1:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 3804,
                                      "name": "_unsafeReadBytesOffset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3939,
                                      "src": "17581:22:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 3807,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "17581:33:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 3803,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "17574:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes1_$",
                                    "typeString": "type(bytes1)"
                                  },
                                  "typeName": {
                                    "id": 3802,
                                    "name": "bytes1",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17574:6:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3808,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17574:41:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17560:55:18"
                            },
                            {
                              "condition": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3821,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 3818,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 3810,
                                            "name": "SPECIAL_CHARS_LOOKUP",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2591,
                                            "src": "17635:20:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "&",
                                          "rightExpression": {
                                            "components": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 3816,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "31",
                                                  "id": 3811,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "17659:1:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                  },
                                                  "value": "1"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<<",
                                                "rightExpression": {
                                                  "arguments": [
                                                    {
                                                      "id": 3814,
                                                      "name": "char",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 3801,
                                                      "src": "17670:4:18",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                      }
                                                    ],
                                                    "id": 3813,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "17664:5:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_uint8_$",
                                                      "typeString": "type(uint8)"
                                                    },
                                                    "typeName": {
                                                      "id": 3812,
                                                      "name": "uint8",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "17664:5:18",
                                                      "typeDescriptions": {}
                                                    }
                                                  },
                                                  "id": 3815,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "typeConversion",
                                                  "lValueRequested": false,
                                                  "nameLocations": [],
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "17664:11:18",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "src": "17659:16:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "id": 3817,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "17658:18:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "17635:41:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 3819,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "17634:43:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 3820,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "17681:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "17634:48:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 3822,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "17633:50:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 3916,
                                "nodeType": "Block",
                                "src": "18328:62:18",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3914,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 3909,
                                          "name": "output",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3777,
                                          "src": "18346:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 3912,
                                        "indexExpression": {
                                          "id": 3911,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "18353:14:18",
                                          "subExpression": {
                                            "id": 3910,
                                            "name": "outputLength",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3787,
                                            "src": "18353:12:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "18346:22:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 3913,
                                        "name": "char",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3801,
                                        "src": "18371:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "src": "18346:29:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    },
                                    "id": 3915,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18346:29:18"
                                  }
                                ]
                              },
                              "id": 3917,
                              "nodeType": "IfStatement",
                              "src": "17629:761:18",
                              "trueBody": {
                                "id": 3908,
                                "nodeType": "Block",
                                "src": "17685:637:18",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 3828,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 3823,
                                          "name": "output",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3777,
                                          "src": "17703:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 3826,
                                        "indexExpression": {
                                          "id": 3825,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "17710:14:18",
                                          "subExpression": {
                                            "id": 3824,
                                            "name": "outputLength",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3787,
                                            "src": "17710:12:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "17703:22:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "hexValue": "5c",
                                        "id": 3827,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "17728:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095",
                                          "typeString": "literal_string \"\\\""
                                        },
                                        "value": "\\"
                                      },
                                      "src": "17703:29:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    },
                                    "id": 3829,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17703:29:18"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      },
                                      "id": 3832,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 3830,
                                        "name": "char",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3801,
                                        "src": "17754:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30783038",
                                        "id": 3831,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "17762:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "0x08"
                                      },
                                      "src": "17754:12:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        },
                                        "id": 3842,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 3840,
                                          "name": "char",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3801,
                                          "src": "17823:4:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "hexValue": "30783039",
                                          "id": 3841,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "17831:4:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_9_by_1",
                                            "typeString": "int_const 9"
                                          },
                                          "value": "0x09"
                                        },
                                        "src": "17823:12:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseBody": {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          },
                                          "id": 3852,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 3850,
                                            "name": "char",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3801,
                                            "src": "17892:4:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "hexValue": "30783061",
                                            "id": 3851,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17900:4:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10_by_1",
                                              "typeString": "int_const 10"
                                            },
                                            "value": "0x0a"
                                          },
                                          "src": "17892:12:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "condition": {
                                            "commonType": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            },
                                            "id": 3862,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 3860,
                                              "name": "char",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3801,
                                              "src": "17961:4:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                              "hexValue": "30783063",
                                              "id": 3861,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17969:4:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_12_by_1",
                                                "typeString": "int_const 12"
                                              },
                                              "value": "0x0c"
                                            },
                                            "src": "17961:12:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          "falseBody": {
                                            "condition": {
                                              "commonType": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              },
                                              "id": 3872,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "id": 3870,
                                                "name": "char",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3801,
                                                "src": "18030:4:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "==",
                                              "rightExpression": {
                                                "hexValue": "30783064",
                                                "id": 3871,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "18038:4:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_13_by_1",
                                                  "typeString": "int_const 13"
                                                },
                                                "value": "0x0d"
                                              },
                                              "src": "18030:12:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            },
                                            "falseBody": {
                                              "condition": {
                                                "commonType": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                },
                                                "id": 3882,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "id": 3880,
                                                  "name": "char",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 3801,
                                                  "src": "18099:4:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                  "hexValue": "30783563",
                                                  "id": 3881,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "18107:4:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_92_by_1",
                                                    "typeString": "int_const 92"
                                                  },
                                                  "value": "0x5c"
                                                },
                                                "src": "18099:12:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              "falseBody": {
                                                "condition": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  },
                                                  "id": 3892,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "id": 3890,
                                                    "name": "char",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3801,
                                                    "src": "18169:4:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes1",
                                                      "typeString": "bytes1"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "==",
                                                  "rightExpression": {
                                                    "hexValue": "30783232",
                                                    "id": 3891,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "18177:4:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_34_by_1",
                                                      "typeString": "int_const 34"
                                                    },
                                                    "value": "0x22"
                                                  },
                                                  "src": "18169:12:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                  }
                                                },
                                                "id": 3901,
                                                "nodeType": "IfStatement",
                                                "src": "18165:143:18",
                                                "trueBody": {
                                                  "id": 3900,
                                                  "nodeType": "Block",
                                                  "src": "18183:125:18",
                                                  "statements": [
                                                    {
                                                      "expression": {
                                                        "id": 3898,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftHandSide": {
                                                          "baseExpression": {
                                                            "id": 3893,
                                                            "name": "output",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3777,
                                                            "src": "18261:6:18",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_bytes_memory_ptr",
                                                              "typeString": "bytes memory"
                                                            }
                                                          },
                                                          "id": 3896,
                                                          "indexExpression": {
                                                            "id": 3895,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "UnaryOperation",
                                                            "operator": "++",
                                                            "prefix": false,
                                                            "src": "18268:14:18",
                                                            "subExpression": {
                                                              "id": 3894,
                                                              "name": "outputLength",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 3787,
                                                              "src": "18268:12:18",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": true,
                                                          "nodeType": "IndexAccess",
                                                          "src": "18261:22:18",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes1",
                                                            "typeString": "bytes1"
                                                          }
                                                        },
                                                        "nodeType": "Assignment",
                                                        "operator": "=",
                                                        "rightHandSide": {
                                                          "hexValue": "22",
                                                          "id": 3897,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "string",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "18286:3:18",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                            "typeString": "literal_string \"\"\""
                                                          },
                                                          "value": "\""
                                                        },
                                                        "src": "18261:28:18",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes1",
                                                          "typeString": "bytes1"
                                                        }
                                                      },
                                                      "id": 3899,
                                                      "nodeType": "ExpressionStatement",
                                                      "src": "18261:28:18"
                                                    }
                                                  ]
                                                }
                                              },
                                              "id": 3902,
                                              "nodeType": "IfStatement",
                                              "src": "18095:213:18",
                                              "trueBody": {
                                                "expression": {
                                                  "id": 3888,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftHandSide": {
                                                    "baseExpression": {
                                                      "id": 3883,
                                                      "name": "output",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 3777,
                                                      "src": "18113:6:18",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                      }
                                                    },
                                                    "id": 3886,
                                                    "indexExpression": {
                                                      "id": 3885,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "UnaryOperation",
                                                      "operator": "++",
                                                      "prefix": false,
                                                      "src": "18120:14:18",
                                                      "subExpression": {
                                                        "id": 3884,
                                                        "name": "outputLength",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3787,
                                                        "src": "18120:12:18",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "18113:22:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes1",
                                                      "typeString": "bytes1"
                                                    }
                                                  },
                                                  "nodeType": "Assignment",
                                                  "operator": "=",
                                                  "rightHandSide": {
                                                    "hexValue": "5c",
                                                    "id": 3887,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "string",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "18138:4:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095",
                                                      "typeString": "literal_string \"\\\""
                                                    },
                                                    "value": "\\"
                                                  },
                                                  "src": "18113:29:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  }
                                                },
                                                "id": 3889,
                                                "nodeType": "ExpressionStatement",
                                                "src": "18113:29:18"
                                              }
                                            },
                                            "id": 3903,
                                            "nodeType": "IfStatement",
                                            "src": "18026:282:18",
                                            "trueBody": {
                                              "expression": {
                                                "id": 3878,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                  "baseExpression": {
                                                    "id": 3873,
                                                    "name": "output",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3777,
                                                    "src": "18044:6:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  },
                                                  "id": 3876,
                                                  "indexExpression": {
                                                    "id": 3875,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "++",
                                                    "prefix": false,
                                                    "src": "18051:14:18",
                                                    "subExpression": {
                                                      "id": 3874,
                                                      "name": "outputLength",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 3787,
                                                      "src": "18051:12:18",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": true,
                                                  "nodeType": "IndexAccess",
                                                  "src": "18044:22:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                  "hexValue": "72",
                                                  "id": 3877,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "string",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "18069:3:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_414f72a4d550cad29f17d9d99a4af64b3776ec5538cd440cef0f03fef2e9e010",
                                                    "typeString": "literal_string \"r\""
                                                  },
                                                  "value": "r"
                                                },
                                                "src": "18044:28:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                }
                                              },
                                              "id": 3879,
                                              "nodeType": "ExpressionStatement",
                                              "src": "18044:28:18"
                                            }
                                          },
                                          "id": 3904,
                                          "nodeType": "IfStatement",
                                          "src": "17957:351:18",
                                          "trueBody": {
                                            "expression": {
                                              "id": 3868,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftHandSide": {
                                                "baseExpression": {
                                                  "id": 3863,
                                                  "name": "output",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 3777,
                                                  "src": "17975:6:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                  }
                                                },
                                                "id": 3866,
                                                "indexExpression": {
                                                  "id": 3865,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "UnaryOperation",
                                                  "operator": "++",
                                                  "prefix": false,
                                                  "src": "17982:14:18",
                                                  "subExpression": {
                                                    "id": 3864,
                                                    "name": "outputLength",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3787,
                                                    "src": "17982:12:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": true,
                                                "nodeType": "IndexAccess",
                                                "src": "17975:22:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                }
                                              },
                                              "nodeType": "Assignment",
                                              "operator": "=",
                                              "rightHandSide": {
                                                "hexValue": "66",
                                                "id": 3867,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "18000:3:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_stringliteral_d1e8aeb79500496ef3dc2e57ba746a8315d048b7a664a2bf948db4fa91960483",
                                                  "typeString": "literal_string \"f\""
                                                },
                                                "value": "f"
                                              },
                                              "src": "17975:28:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              }
                                            },
                                            "id": 3869,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17975:28:18"
                                          }
                                        },
                                        "id": 3905,
                                        "nodeType": "IfStatement",
                                        "src": "17888:420:18",
                                        "trueBody": {
                                          "expression": {
                                            "id": 3858,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "baseExpression": {
                                                "id": 3853,
                                                "name": "output",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3777,
                                                "src": "17906:6:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              },
                                              "id": 3856,
                                              "indexExpression": {
                                                "id": 3855,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "++",
                                                "prefix": false,
                                                "src": "17913:14:18",
                                                "subExpression": {
                                                  "id": 3854,
                                                  "name": "outputLength",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 3787,
                                                  "src": "17913:12:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "nodeType": "IndexAccess",
                                              "src": "17906:22:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "=",
                                            "rightHandSide": {
                                              "hexValue": "6e",
                                              "id": 3857,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17931:3:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_4b4ecedb4964a40fe416b16c7bd8b46092040ec42ef0aa69e59f09872f105cf3",
                                                "typeString": "literal_string \"n\""
                                              },
                                              "value": "n"
                                            },
                                            "src": "17906:28:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          },
                                          "id": 3859,
                                          "nodeType": "ExpressionStatement",
                                          "src": "17906:28:18"
                                        }
                                      },
                                      "id": 3906,
                                      "nodeType": "IfStatement",
                                      "src": "17819:489:18",
                                      "trueBody": {
                                        "expression": {
                                          "id": 3848,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "baseExpression": {
                                              "id": 3843,
                                              "name": "output",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3777,
                                              "src": "17837:6:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 3846,
                                            "indexExpression": {
                                              "id": 3845,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "UnaryOperation",
                                              "operator": "++",
                                              "prefix": false,
                                              "src": "17844:14:18",
                                              "subExpression": {
                                                "id": 3844,
                                                "name": "outputLength",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3787,
                                                "src": "17844:12:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "17837:22:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "hexValue": "74",
                                            "id": 3847,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "string",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17862:3:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_stringliteral_cac1bb71f0a97c8ac94ca9546b43178a9ad254c7b757ac07433aa6df35cd8089",
                                              "typeString": "literal_string \"t\""
                                            },
                                            "value": "t"
                                          },
                                          "src": "17837:28:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          }
                                        },
                                        "id": 3849,
                                        "nodeType": "ExpressionStatement",
                                        "src": "17837:28:18"
                                      }
                                    },
                                    "id": 3907,
                                    "nodeType": "IfStatement",
                                    "src": "17750:558:18",
                                    "trueBody": {
                                      "expression": {
                                        "id": 3838,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "baseExpression": {
                                            "id": 3833,
                                            "name": "output",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3777,
                                            "src": "17768:6:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 3836,
                                          "indexExpression": {
                                            "id": 3835,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "17775:14:18",
                                            "subExpression": {
                                              "id": 3834,
                                              "name": "outputLength",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3787,
                                              "src": "17775:12:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "17768:22:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "hexValue": "62",
                                          "id": 3837,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "string",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "17793:3:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510",
                                            "typeString": "literal_string \"b\""
                                          },
                                          "value": "b"
                                        },
                                        "src": "17768:28:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "id": 3839,
                                      "nodeType": "ExpressionStatement",
                                      "src": "17768:28:18"
                                    }
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3793,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3791,
                            "src": "17522:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 3794,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3770,
                              "src": "17526:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "17533:6:18",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "17526:13:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17522:17:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3919,
                        "initializationExpression": {
                          "assignments": [
                            3791
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3791,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "17519:1:18",
                              "nodeType": "VariableDeclaration",
                              "scope": 3919,
                              "src": "17511:9:18",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3790,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "17511:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3792,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "17511:9:18"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 3798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "17541:3:18",
                            "subExpression": {
                              "id": 3797,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3791,
                              "src": "17543:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3799,
                          "nodeType": "ExpressionStatement",
                          "src": "17541:3:18"
                        },
                        "nodeType": "ForStatement",
                        "src": "17506:894:18"
                      },
                      {
                        "AST": {
                          "nativeSrc": "18498:129:18",
                          "nodeType": "YulBlock",
                          "src": "18498:129:18",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "output",
                                    "nativeSrc": "18519:6:18",
                                    "nodeType": "YulIdentifier",
                                    "src": "18519:6:18"
                                  },
                                  {
                                    "name": "outputLength",
                                    "nativeSrc": "18527:12:18",
                                    "nodeType": "YulIdentifier",
                                    "src": "18527:12:18"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18512:6:18",
                                  "nodeType": "YulIdentifier",
                                  "src": "18512:6:18"
                                },
                                "nativeSrc": "18512:28:18",
                                "nodeType": "YulFunctionCall",
                                "src": "18512:28:18"
                              },
                              "nativeSrc": "18512:28:18",
                              "nodeType": "YulExpressionStatement",
                              "src": "18512:28:18"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18560:4:18",
                                    "nodeType": "YulLiteral",
                                    "src": "18560:4:18",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "output",
                                        "nativeSrc": "18570:6:18",
                                        "nodeType": "YulIdentifier",
                                        "src": "18570:6:18"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18582:1:18",
                                            "nodeType": "YulLiteral",
                                            "src": "18582:1:18",
                                            "type": "",
                                            "value": "5"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nativeSrc": "18589:1:18",
                                                "nodeType": "YulLiteral",
                                                "src": "18589:1:18",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "outputLength",
                                                    "nativeSrc": "18596:12:18",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "18596:12:18"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nativeSrc": "18610:2:18",
                                                    "nodeType": "YulLiteral",
                                                    "src": "18610:2:18",
                                                    "type": "",
                                                    "value": "63"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nativeSrc": "18592:3:18",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "18592:3:18"
                                                },
                                                "nativeSrc": "18592:21:18",
                                                "nodeType": "YulFunctionCall",
                                                "src": "18592:21:18"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shr",
                                              "nativeSrc": "18585:3:18",
                                              "nodeType": "YulIdentifier",
                                              "src": "18585:3:18"
                                            },
                                            "nativeSrc": "18585:29:18",
                                            "nodeType": "YulFunctionCall",
                                            "src": "18585:29:18"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nativeSrc": "18578:3:18",
                                          "nodeType": "YulIdentifier",
                                          "src": "18578:3:18"
                                        },
                                        "nativeSrc": "18578:37:18",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18578:37:18"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18566:3:18",
                                      "nodeType": "YulIdentifier",
                                      "src": "18566:3:18"
                                    },
                                    "nativeSrc": "18566:50:18",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18566:50:18"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18553:6:18",
                                  "nodeType": "YulIdentifier",
                                  "src": "18553:6:18"
                                },
                                "nativeSrc": "18553:64:18",
                                "nodeType": "YulFunctionCall",
                                "src": "18553:64:18"
                              },
                              "nativeSrc": "18553:64:18",
                              "nodeType": "YulExpressionStatement",
                              "src": "18553:64:18"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3777,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18519:6:18",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3777,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18570:6:18",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3787,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18527:12:18",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3787,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18596:12:18",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 3920,
                        "nodeType": "InlineAssembly",
                        "src": "18473:154:18"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3923,
                              "name": "output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3777,
                              "src": "18651:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3922,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18644:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 3921,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "18644:6:18",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18644:14:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3925,
                        "nodeType": "Return",
                        "src": "18637:21:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3762,
                    "nodeType": "StructuredDocumentation",
                    "src": "16674:576:18",
                    "text": " @dev Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.\n WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.\n NOTE: This function escapes all unicode characters, and not just the ones in ranges defined in section 2.5 of\n RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). ECMAScript's `JSON.parse` does recover escaped unicode\n characters that are not in this range, but other tooling may provide different results."
                  },
                  "id": 3927,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "escapeJSON",
                  "nameLocation": "17264:10:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3764,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "17289:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3927,
                        "src": "17275:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3763,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "17275:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17274:21:18"
                  },
                  "returnParameters": {
                    "id": 3768,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3767,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3927,
                        "src": "17319:13:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3766,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "17319:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17318:15:18"
                  },
                  "scope": 3940,
                  "src": "17255:1410:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3938,
                    "nodeType": "Block",
                    "src": "19050:225:18",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "19199:70:18",
                          "nodeType": "YulBlock",
                          "src": "19199:70:18",
                          "statements": [
                            {
                              "nativeSrc": "19213:46:18",
                              "nodeType": "YulAssignment",
                              "src": "19213:46:18",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "buffer",
                                        "nativeSrc": "19232:6:18",
                                        "nodeType": "YulIdentifier",
                                        "src": "19232:6:18"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nativeSrc": "19244:4:18",
                                            "nodeType": "YulLiteral",
                                            "src": "19244:4:18",
                                            "type": "",
                                            "value": "0x20"
                                          },
                                          {
                                            "name": "offset",
                                            "nativeSrc": "19250:6:18",
                                            "nodeType": "YulIdentifier",
                                            "src": "19250:6:18"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "19240:3:18",
                                          "nodeType": "YulIdentifier",
                                          "src": "19240:3:18"
                                        },
                                        "nativeSrc": "19240:17:18",
                                        "nodeType": "YulFunctionCall",
                                        "src": "19240:17:18"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "19228:3:18",
                                      "nodeType": "YulIdentifier",
                                      "src": "19228:3:18"
                                    },
                                    "nativeSrc": "19228:30:18",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19228:30:18"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "19222:5:18",
                                  "nodeType": "YulIdentifier",
                                  "src": "19222:5:18"
                                },
                                "nativeSrc": "19222:37:18",
                                "nodeType": "YulFunctionCall",
                                "src": "19222:37:18"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nativeSrc": "19213:5:18",
                                  "nodeType": "YulIdentifier",
                                  "src": "19213:5:18"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3930,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19232:6:18",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3932,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19250:6:18",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3935,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19213:5:18",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 3937,
                        "nodeType": "InlineAssembly",
                        "src": "19174:95:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3928,
                    "nodeType": "StructuredDocumentation",
                    "src": "18671:268:18",
                    "text": " @dev Reads a bytes32 from a bytes array without bounds checking.\n NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n assembly block as such would prevent some optimizations."
                  },
                  "id": 3939,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_unsafeReadBytesOffset",
                  "nameLocation": "18953:22:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3933,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3930,
                        "mutability": "mutable",
                        "name": "buffer",
                        "nameLocation": "18989:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3939,
                        "src": "18976:19:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3929,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18976:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3932,
                        "mutability": "mutable",
                        "name": "offset",
                        "nameLocation": "19005:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3939,
                        "src": "18997:14:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3931,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18997:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18975:37:18"
                  },
                  "returnParameters": {
                    "id": 3936,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3935,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "19043:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3939,
                        "src": "19035:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3934,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "19035:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19034:15:18"
                  },
                  "scope": 3940,
                  "src": "18944:331:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 3941,
              "src": "297:18980:18",
              "usedErrors": [
                2598,
                2601,
                2604
              ],
              "usedEvents": []
            }
          ],
          "src": "101:19177:18"
        },
        "id": 18
      },
      "@openzeppelin/contracts/utils/cryptography/Hashes.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/cryptography/Hashes.sol",
          "exportedSymbols": {
            "Hashes": [
              3980
            ]
          },
          "id": 3981,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3942,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "113:24:19"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Hashes",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3943,
                "nodeType": "StructuredDocumentation",
                "src": "139:81:19",
                "text": " @dev Library of standard hash functions.\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 3980,
              "linearizedBaseContracts": [
                3980
              ],
              "name": "Hashes",
              "nameLocation": "229:6:19",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3966,
                    "nodeType": "Block",
                    "src": "588:83:19",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 3955,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3953,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3946,
                              "src": "605:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 3954,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3948,
                              "src": "609:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "src": "605:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "id": 3961,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3948,
                                "src": "659:1:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 3962,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3946,
                                "src": "662:1:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 3960,
                              "name": "efficientKeccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3979,
                              "src": "640:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32,bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 3963,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "640:24:19",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "605:59:19",
                          "trueExpression": {
                            "arguments": [
                              {
                                "id": 3957,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3946,
                                "src": "632:1:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 3958,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3948,
                                "src": "635:1:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 3956,
                              "name": "efficientKeccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3979,
                              "src": "613:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32,bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 3959,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "613:24:19",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 3952,
                        "id": 3965,
                        "nodeType": "Return",
                        "src": "598:66:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3944,
                    "nodeType": "StructuredDocumentation",
                    "src": "242:257:19",
                    "text": " @dev Commutative Keccak256 hash of a sorted pair of bytes32. Frequently used when working with merkle proofs.\n NOTE: Equivalent to the `standardNodeHash` in our https://github.com/OpenZeppelin/merkle-tree[JavaScript library]."
                  },
                  "id": 3967,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "commutativeKeccak256",
                  "nameLocation": "513:20:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3949,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3946,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "542:1:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3967,
                        "src": "534:9:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3945,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "534:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3948,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "553:1:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3967,
                        "src": "545:9:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3947,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "545:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "533:22:19"
                  },
                  "returnParameters": {
                    "id": 3952,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3951,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3967,
                        "src": "579:7:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3950,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "579:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "578:9:19"
                  },
                  "scope": 3980,
                  "src": "504:167:19",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3978,
                    "nodeType": "Block",
                    "src": "879:151:19",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "914:110:19",
                          "nodeType": "YulBlock",
                          "src": "914:110:19",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "935:4:19",
                                    "nodeType": "YulLiteral",
                                    "src": "935:4:19",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "name": "a",
                                    "nativeSrc": "941:1:19",
                                    "nodeType": "YulIdentifier",
                                    "src": "941:1:19"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "928:6:19",
                                  "nodeType": "YulIdentifier",
                                  "src": "928:6:19"
                                },
                                "nativeSrc": "928:15:19",
                                "nodeType": "YulFunctionCall",
                                "src": "928:15:19"
                              },
                              "nativeSrc": "928:15:19",
                              "nodeType": "YulExpressionStatement",
                              "src": "928:15:19"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "963:4:19",
                                    "nodeType": "YulLiteral",
                                    "src": "963:4:19",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "969:1:19",
                                    "nodeType": "YulIdentifier",
                                    "src": "969:1:19"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "956:6:19",
                                  "nodeType": "YulIdentifier",
                                  "src": "956:6:19"
                                },
                                "nativeSrc": "956:15:19",
                                "nodeType": "YulFunctionCall",
                                "src": "956:15:19"
                              },
                              "nativeSrc": "956:15:19",
                              "nodeType": "YulExpressionStatement",
                              "src": "956:15:19"
                            },
                            {
                              "nativeSrc": "984:30:19",
                              "nodeType": "YulAssignment",
                              "src": "984:30:19",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1003:4:19",
                                    "nodeType": "YulLiteral",
                                    "src": "1003:4:19",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1009:4:19",
                                    "nodeType": "YulLiteral",
                                    "src": "1009:4:19",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "993:9:19",
                                  "nodeType": "YulIdentifier",
                                  "src": "993:9:19"
                                },
                                "nativeSrc": "993:21:19",
                                "nodeType": "YulFunctionCall",
                                "src": "993:21:19"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nativeSrc": "984:5:19",
                                  "nodeType": "YulIdentifier",
                                  "src": "984:5:19"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3970,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "941:1:19",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3972,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "969:1:19",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3975,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "984:5:19",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 3977,
                        "nodeType": "InlineAssembly",
                        "src": "889:135:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3968,
                    "nodeType": "StructuredDocumentation",
                    "src": "677:109:19",
                    "text": " @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory."
                  },
                  "id": 3979,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "efficientKeccak256",
                  "nameLocation": "800:18:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3973,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3970,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "827:1:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3979,
                        "src": "819:9:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3969,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "819:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3972,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "838:1:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3979,
                        "src": "830:9:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3971,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "830:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "818:22:19"
                  },
                  "returnParameters": {
                    "id": 3976,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3975,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "872:5:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3979,
                        "src": "864:13:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3974,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "864:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "863:15:19"
                  },
                  "scope": 3980,
                  "src": "791:239:19",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3981,
              "src": "221:811:19",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "113:920:19"
        },
        "id": 19
      },
      "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol",
          "exportedSymbols": {
            "Hashes": [
              3980
            ],
            "MerkleProof": [
              5053
            ]
          },
          "id": 5054,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3982,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "206:24:20"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/cryptography/Hashes.sol",
              "file": "./Hashes.sol",
              "id": 3984,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5054,
              "sourceUnit": 3981,
              "src": "232:36:20",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3983,
                    "name": "Hashes",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3980,
                    "src": "240:6:20",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "MerkleProof",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3985,
                "nodeType": "StructuredDocumentation",
                "src": "270:1082:20",
                "text": " @dev These functions deal with verification of Merkle Tree proofs.\n The tree and the proofs can be generated using our\n https://github.com/OpenZeppelin/merkle-tree[JavaScript library].\n You will find a quickstart guide in the readme.\n WARNING: You should avoid using leaf values that are 64 bytes long prior to\n hashing, or use a hash function other than keccak256 for hashing leaves.\n This is because the concatenation of a sorted pair of internal nodes in\n the Merkle tree could be reinterpreted as a leaf value.\n OpenZeppelin's JavaScript library generates Merkle trees that are safe\n against this attack out of the box.\n IMPORTANT: Consider memory side-effects when using custom hashing functions\n that access memory in an unsafe way.\n NOTE: This library supports proof verification for merkle trees built using\n custom _commutative_ hashing functions (i.e. `H(a, b) == H(b, a)`). Proving\n leaf inclusion in trees built using non-commutative hashing functions requires\n additional logic that is not supported by this library."
              },
              "fullyImplemented": true,
              "id": 5053,
              "linearizedBaseContracts": [
                5053
              ],
              "name": "MerkleProof",
              "nameLocation": "1361:11:20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 3986,
                    "nodeType": "StructuredDocumentation",
                    "src": "1379:60:20",
                    "text": "@dev The multiproof provided is not valid."
                  },
                  "errorSelector": "35140492",
                  "id": 3988,
                  "name": "MerkleProofInvalidMultiproof",
                  "nameLocation": "1450:28:20",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3987,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1478:2:20"
                  },
                  "src": "1444:37:20"
                },
                {
                  "body": {
                    "id": 4008,
                    "nodeType": "Block",
                    "src": "1999:57:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4002,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3992,
                                "src": "2029:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              {
                                "id": 4003,
                                "name": "leaf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3996,
                                "src": "2036:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 4001,
                              "name": "processProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4050,
                                4132
                              ],
                              "referencedDeclaration": 4050,
                              "src": "2016:12:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] memory,bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 4004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2016:25:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4005,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3994,
                            "src": "2045:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2016:33:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4000,
                        "id": 4007,
                        "nodeType": "Return",
                        "src": "2009:40:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3989,
                    "nodeType": "StructuredDocumentation",
                    "src": "1487:410:20",
                    "text": " @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n defined by `root`. For this, a `proof` must be provided, containing\n sibling hashes on the branch from the leaf to the root of the tree. Each\n pair of leaves and each pair of pre-images are assumed to be sorted.\n This version handles proofs in memory with the default hashing function."
                  },
                  "id": 4009,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verify",
                  "nameLocation": "1911:6:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3997,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3992,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "1935:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4009,
                        "src": "1918:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3990,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1918:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3991,
                          "nodeType": "ArrayTypeName",
                          "src": "1918:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3994,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "1950:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4009,
                        "src": "1942:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3993,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1942:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3996,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "1964:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4009,
                        "src": "1956:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3995,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1956:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1917:52:20"
                  },
                  "returnParameters": {
                    "id": 4000,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3999,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4009,
                        "src": "1993:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3998,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1993:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1992:6:20"
                  },
                  "scope": 5053,
                  "src": "1902:154:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4049,
                    "nodeType": "Block",
                    "src": "2549:216:20",
                    "statements": [
                      {
                        "assignments": [
                          4021
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4021,
                            "mutability": "mutable",
                            "name": "computedHash",
                            "nameLocation": "2567:12:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4049,
                            "src": "2559:20:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4020,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2559:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4023,
                        "initialValue": {
                          "id": 4022,
                          "name": "leaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4015,
                          "src": "2582:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2559:27:20"
                      },
                      {
                        "body": {
                          "id": 4045,
                          "nodeType": "Block",
                          "src": "2639:91:20",
                          "statements": [
                            {
                              "expression": {
                                "id": 4043,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 4035,
                                  "name": "computedHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4021,
                                  "src": "2653:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4038,
                                      "name": "computedHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4021,
                                      "src": "2696:12:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "baseExpression": {
                                        "id": 4039,
                                        "name": "proof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4013,
                                        "src": "2710:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                          "typeString": "bytes32[] memory"
                                        }
                                      },
                                      "id": 4041,
                                      "indexExpression": {
                                        "id": 4040,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4025,
                                        "src": "2716:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "2710:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "expression": {
                                      "id": 4036,
                                      "name": "Hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3980,
                                      "src": "2668:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Hashes_$3980_$",
                                        "typeString": "type(library Hashes)"
                                      }
                                    },
                                    "id": 4037,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "2675:20:20",
                                    "memberName": "commutativeKeccak256",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3967,
                                    "src": "2668:27:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4042,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2668:51:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "2653:66:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4044,
                              "nodeType": "ExpressionStatement",
                              "src": "2653:66:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4028,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4025,
                            "src": "2616:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 4029,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4013,
                              "src": "2620:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 4030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2626:6:20",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2620:12:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2616:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4046,
                        "initializationExpression": {
                          "assignments": [
                            4025
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4025,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "2609:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 4046,
                              "src": "2601:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4024,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2601:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4027,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2613:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2601:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4033,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "2634:3:20",
                            "subExpression": {
                              "id": 4032,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4025,
                              "src": "2634:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4034,
                          "nodeType": "ExpressionStatement",
                          "src": "2634:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "2596:134:20"
                      },
                      {
                        "expression": {
                          "id": 4047,
                          "name": "computedHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4021,
                          "src": "2746:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4019,
                        "id": 4048,
                        "nodeType": "Return",
                        "src": "2739:19:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4010,
                    "nodeType": "StructuredDocumentation",
                    "src": "2062:390:20",
                    "text": " @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n hash matches the root of the tree. When processing the proof, the pairs\n of leaves & pre-images are assumed to be sorted.\n This version handles proofs in memory with the default hashing function."
                  },
                  "id": 4050,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processProof",
                  "nameLocation": "2466:12:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4016,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4013,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "2496:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4050,
                        "src": "2479:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4011,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "2479:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4012,
                          "nodeType": "ArrayTypeName",
                          "src": "2479:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4015,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "2511:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4050,
                        "src": "2503:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4014,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2503:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2478:38:20"
                  },
                  "returnParameters": {
                    "id": 4019,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4018,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4050,
                        "src": "2540:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4017,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2540:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2539:9:20"
                  },
                  "scope": 5053,
                  "src": "2457:308:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4081,
                    "nodeType": "Block",
                    "src": "3376:65:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4074,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4054,
                                "src": "3406:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              {
                                "id": 4075,
                                "name": "leaf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4058,
                                "src": "3413:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 4076,
                                "name": "hasher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4068,
                                "src": "3419:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              ],
                              "id": 4073,
                              "name": "processProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4050,
                                4132
                              ],
                              "referencedDeclaration": 4132,
                              "src": "3393:12:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] memory,bytes32,function (bytes32,bytes32) view returns (bytes32)) view returns (bytes32)"
                              }
                            },
                            "id": 4077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3393:33:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4078,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4056,
                            "src": "3430:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3393:41:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4072,
                        "id": 4080,
                        "nodeType": "Return",
                        "src": "3386:48:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4051,
                    "nodeType": "StructuredDocumentation",
                    "src": "2771:407:20",
                    "text": " @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n defined by `root`. For this, a `proof` must be provided, containing\n sibling hashes on the branch from the leaf to the root of the tree. Each\n pair of leaves and each pair of pre-images are assumed to be sorted.\n This version handles proofs in memory with a custom hashing function."
                  },
                  "id": 4082,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verify",
                  "nameLocation": "3192:6:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4069,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4054,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "3225:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4082,
                        "src": "3208:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4052,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "3208:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4053,
                          "nodeType": "ArrayTypeName",
                          "src": "3208:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4056,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "3248:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4082,
                        "src": "3240:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4055,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3240:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4058,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "3270:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4082,
                        "src": "3262:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4057,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3262:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4068,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "3334:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4082,
                        "src": "3284:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4067,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4063,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4060,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4067,
                                "src": "3293:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4059,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3293:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4062,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4067,
                                "src": "3302:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4061,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3302:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "3292:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4066,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4065,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4067,
                                "src": "3325:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4064,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3325:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "3324:9:20"
                          },
                          "src": "3284:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3198:148:20"
                  },
                  "returnParameters": {
                    "id": 4072,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4071,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4082,
                        "src": "3370:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4070,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3370:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3369:6:20"
                  },
                  "scope": 5053,
                  "src": "3183:258:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4131,
                    "nodeType": "Block",
                    "src": "4019:195:20",
                    "statements": [
                      {
                        "assignments": [
                          4104
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4104,
                            "mutability": "mutable",
                            "name": "computedHash",
                            "nameLocation": "4037:12:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4131,
                            "src": "4029:20:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4103,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "4029:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4106,
                        "initialValue": {
                          "id": 4105,
                          "name": "leaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4088,
                          "src": "4052:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4029:27:20"
                      },
                      {
                        "body": {
                          "id": 4127,
                          "nodeType": "Block",
                          "src": "4109:70:20",
                          "statements": [
                            {
                              "expression": {
                                "id": 4125,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 4118,
                                  "name": "computedHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4104,
                                  "src": "4123:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4120,
                                      "name": "computedHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4104,
                                      "src": "4145:12:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "baseExpression": {
                                        "id": 4121,
                                        "name": "proof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4086,
                                        "src": "4159:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                          "typeString": "bytes32[] memory"
                                        }
                                      },
                                      "id": 4123,
                                      "indexExpression": {
                                        "id": 4122,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4108,
                                        "src": "4165:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "4159:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 4119,
                                    "name": "hasher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4098,
                                    "src": "4138:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                    }
                                  },
                                  "id": 4124,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4138:30:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "4123:45:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4126,
                              "nodeType": "ExpressionStatement",
                              "src": "4123:45:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4111,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4108,
                            "src": "4086:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 4112,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4086,
                              "src": "4090:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 4113,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4096:6:20",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4090:12:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4086:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4128,
                        "initializationExpression": {
                          "assignments": [
                            4108
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4108,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "4079:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 4128,
                              "src": "4071:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4107,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "4071:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4110,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4109,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4083:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "4071:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "4104:3:20",
                            "subExpression": {
                              "id": 4115,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4108,
                              "src": "4104:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4117,
                          "nodeType": "ExpressionStatement",
                          "src": "4104:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "4066:113:20"
                      },
                      {
                        "expression": {
                          "id": 4129,
                          "name": "computedHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4104,
                          "src": "4195:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4102,
                        "id": 4130,
                        "nodeType": "Return",
                        "src": "4188:19:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4083,
                    "nodeType": "StructuredDocumentation",
                    "src": "3447:387:20",
                    "text": " @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n hash matches the root of the tree. When processing the proof, the pairs\n of leaves & pre-images are assumed to be sorted.\n This version handles proofs in memory with a custom hashing function."
                  },
                  "id": 4132,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processProof",
                  "nameLocation": "3848:12:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4099,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4086,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "3887:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4132,
                        "src": "3870:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4084,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "3870:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4085,
                          "nodeType": "ArrayTypeName",
                          "src": "3870:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4088,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "3910:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4132,
                        "src": "3902:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4087,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3902:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4098,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "3974:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4132,
                        "src": "3924:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4097,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4093,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4090,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4097,
                                "src": "3933:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4089,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3933:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4092,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4097,
                                "src": "3942:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4091,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3942:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "3932:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4096,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4095,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4097,
                                "src": "3965:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4094,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3965:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "3964:9:20"
                          },
                          "src": "3924:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3860:126:20"
                  },
                  "returnParameters": {
                    "id": 4102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4101,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4132,
                        "src": "4010:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4100,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4010:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4009:9:20"
                  },
                  "scope": 5053,
                  "src": "3839:375:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4152,
                    "nodeType": "Block",
                    "src": "4744:65:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4146,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4136,
                                "src": "4782:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                }
                              },
                              {
                                "id": 4147,
                                "name": "leaf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4140,
                                "src": "4789:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 4145,
                              "name": "processProofCalldata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4194,
                                4276
                              ],
                              "referencedDeclaration": 4194,
                              "src": "4761:20:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_bytes32_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] calldata,bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 4148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4761:33:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4149,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4138,
                            "src": "4798:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4761:41:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4144,
                        "id": 4151,
                        "nodeType": "Return",
                        "src": "4754:48:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4133,
                    "nodeType": "StructuredDocumentation",
                    "src": "4220:412:20",
                    "text": " @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n defined by `root`. For this, a `proof` must be provided, containing\n sibling hashes on the branch from the leaf to the root of the tree. Each\n pair of leaves and each pair of pre-images are assumed to be sorted.\n This version handles proofs in calldata with the default hashing function."
                  },
                  "id": 4153,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCalldata",
                  "nameLocation": "4646:14:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4141,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4136,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "4680:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4153,
                        "src": "4661:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4134,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "4661:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4135,
                          "nodeType": "ArrayTypeName",
                          "src": "4661:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4138,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "4695:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4153,
                        "src": "4687:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4137,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4687:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4140,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "4709:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4153,
                        "src": "4701:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4139,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4701:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4660:54:20"
                  },
                  "returnParameters": {
                    "id": 4144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4143,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4153,
                        "src": "4738:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4142,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4738:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4737:6:20"
                  },
                  "scope": 5053,
                  "src": "4637:172:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4193,
                    "nodeType": "Block",
                    "src": "5314:216:20",
                    "statements": [
                      {
                        "assignments": [
                          4165
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4165,
                            "mutability": "mutable",
                            "name": "computedHash",
                            "nameLocation": "5332:12:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4193,
                            "src": "5324:20:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4164,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "5324:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4167,
                        "initialValue": {
                          "id": 4166,
                          "name": "leaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4159,
                          "src": "5347:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5324:27:20"
                      },
                      {
                        "body": {
                          "id": 4189,
                          "nodeType": "Block",
                          "src": "5404:91:20",
                          "statements": [
                            {
                              "expression": {
                                "id": 4187,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 4179,
                                  "name": "computedHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4165,
                                  "src": "5418:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4182,
                                      "name": "computedHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4165,
                                      "src": "5461:12:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "baseExpression": {
                                        "id": 4183,
                                        "name": "proof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4157,
                                        "src": "5475:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                          "typeString": "bytes32[] calldata"
                                        }
                                      },
                                      "id": 4185,
                                      "indexExpression": {
                                        "id": 4184,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4169,
                                        "src": "5481:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5475:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "expression": {
                                      "id": 4180,
                                      "name": "Hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3980,
                                      "src": "5433:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Hashes_$3980_$",
                                        "typeString": "type(library Hashes)"
                                      }
                                    },
                                    "id": 4181,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "5440:20:20",
                                    "memberName": "commutativeKeccak256",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3967,
                                    "src": "5433:27:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4186,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5433:51:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "5418:66:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4188,
                              "nodeType": "ExpressionStatement",
                              "src": "5418:66:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4172,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4169,
                            "src": "5381:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 4173,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4157,
                              "src": "5385:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            },
                            "id": 4174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5391:6:20",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "5385:12:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5381:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4190,
                        "initializationExpression": {
                          "assignments": [
                            4169
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4169,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "5374:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 4190,
                              "src": "5366:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4168,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5366:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4171,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5378:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5366:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4177,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5399:3:20",
                            "subExpression": {
                              "id": 4176,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4169,
                              "src": "5399:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4178,
                          "nodeType": "ExpressionStatement",
                          "src": "5399:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "5361:134:20"
                      },
                      {
                        "expression": {
                          "id": 4191,
                          "name": "computedHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4165,
                          "src": "5511:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4163,
                        "id": 4192,
                        "nodeType": "Return",
                        "src": "5504:19:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4154,
                    "nodeType": "StructuredDocumentation",
                    "src": "4815:392:20",
                    "text": " @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n hash matches the root of the tree. When processing the proof, the pairs\n of leaves & pre-images are assumed to be sorted.\n This version handles proofs in calldata with the default hashing function."
                  },
                  "id": 4194,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processProofCalldata",
                  "nameLocation": "5221:20:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4157,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "5261:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4194,
                        "src": "5242:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4155,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "5242:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4156,
                          "nodeType": "ArrayTypeName",
                          "src": "5242:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4159,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "5276:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4194,
                        "src": "5268:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4158,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5268:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5241:40:20"
                  },
                  "returnParameters": {
                    "id": 4163,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4162,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4194,
                        "src": "5305:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4161,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5305:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5304:9:20"
                  },
                  "scope": 5053,
                  "src": "5212:318:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4225,
                    "nodeType": "Block",
                    "src": "6153:73:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4218,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4198,
                                "src": "6191:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                }
                              },
                              {
                                "id": 4219,
                                "name": "leaf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4202,
                                "src": "6198:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 4220,
                                "name": "hasher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4212,
                                "src": "6204:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              ],
                              "id": 4217,
                              "name": "processProofCalldata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4194,
                                4276
                              ],
                              "referencedDeclaration": 4276,
                              "src": "6170:20:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_bytes32_$_t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] calldata,bytes32,function (bytes32,bytes32) view returns (bytes32)) view returns (bytes32)"
                              }
                            },
                            "id": 4221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6170:41:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4222,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4200,
                            "src": "6215:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "6170:49:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4216,
                        "id": 4224,
                        "nodeType": "Return",
                        "src": "6163:56:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4195,
                    "nodeType": "StructuredDocumentation",
                    "src": "5536:409:20",
                    "text": " @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n defined by `root`. For this, a `proof` must be provided, containing\n sibling hashes on the branch from the leaf to the root of the tree. Each\n pair of leaves and each pair of pre-images are assumed to be sorted.\n This version handles proofs in calldata with a custom hashing function."
                  },
                  "id": 4226,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCalldata",
                  "nameLocation": "5959:14:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4213,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4198,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "6002:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4226,
                        "src": "5983:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4196,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "5983:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4197,
                          "nodeType": "ArrayTypeName",
                          "src": "5983:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4200,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "6025:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4226,
                        "src": "6017:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4199,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6017:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4202,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "6047:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4226,
                        "src": "6039:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4201,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6039:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4212,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "6111:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4226,
                        "src": "6061:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4211,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4207,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4204,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4211,
                                "src": "6070:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4203,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6070:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4206,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4211,
                                "src": "6079:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4205,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6079:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "6069:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4210,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4209,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4211,
                                "src": "6102:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4208,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6102:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "6101:9:20"
                          },
                          "src": "6061:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5973:150:20"
                  },
                  "returnParameters": {
                    "id": 4216,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4215,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4226,
                        "src": "6147:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4214,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6147:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6146:6:20"
                  },
                  "scope": 5053,
                  "src": "5950:276:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4275,
                    "nodeType": "Block",
                    "src": "6816:195:20",
                    "statements": [
                      {
                        "assignments": [
                          4248
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4248,
                            "mutability": "mutable",
                            "name": "computedHash",
                            "nameLocation": "6834:12:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4275,
                            "src": "6826:20:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4247,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "6826:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4250,
                        "initialValue": {
                          "id": 4249,
                          "name": "leaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4232,
                          "src": "6849:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6826:27:20"
                      },
                      {
                        "body": {
                          "id": 4271,
                          "nodeType": "Block",
                          "src": "6906:70:20",
                          "statements": [
                            {
                              "expression": {
                                "id": 4269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 4262,
                                  "name": "computedHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4248,
                                  "src": "6920:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4264,
                                      "name": "computedHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4248,
                                      "src": "6942:12:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "baseExpression": {
                                        "id": 4265,
                                        "name": "proof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4230,
                                        "src": "6956:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                          "typeString": "bytes32[] calldata"
                                        }
                                      },
                                      "id": 4267,
                                      "indexExpression": {
                                        "id": 4266,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4252,
                                        "src": "6962:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "6956:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 4263,
                                    "name": "hasher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4242,
                                    "src": "6935:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                    }
                                  },
                                  "id": 4268,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6935:30:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "6920:45:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4270,
                              "nodeType": "ExpressionStatement",
                              "src": "6920:45:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4255,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4252,
                            "src": "6883:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 4256,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4230,
                              "src": "6887:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            },
                            "id": 4257,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6893:6:20",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "6887:12:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6883:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4272,
                        "initializationExpression": {
                          "assignments": [
                            4252
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4252,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "6876:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 4272,
                              "src": "6868:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4251,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6868:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4254,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6880:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "6868:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "6901:3:20",
                            "subExpression": {
                              "id": 4259,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4252,
                              "src": "6901:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4261,
                          "nodeType": "ExpressionStatement",
                          "src": "6901:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "6863:113:20"
                      },
                      {
                        "expression": {
                          "id": 4273,
                          "name": "computedHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4248,
                          "src": "6992:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4246,
                        "id": 4274,
                        "nodeType": "Return",
                        "src": "6985:19:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4227,
                    "nodeType": "StructuredDocumentation",
                    "src": "6232:389:20",
                    "text": " @dev Returns the rebuilt hash obtained by traversing a Merkle tree up\n from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt\n hash matches the root of the tree. When processing the proof, the pairs\n of leaves & pre-images are assumed to be sorted.\n This version handles proofs in calldata with a custom hashing function."
                  },
                  "id": 4276,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processProofCalldata",
                  "nameLocation": "6635:20:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4243,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4230,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "6684:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4276,
                        "src": "6665:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4228,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "6665:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4229,
                          "nodeType": "ArrayTypeName",
                          "src": "6665:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4232,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "6707:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4276,
                        "src": "6699:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4231,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6699:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4242,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "6771:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4276,
                        "src": "6721:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4241,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4237,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4234,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4241,
                                "src": "6730:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4233,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6730:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4236,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4241,
                                "src": "6739:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4235,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6739:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "6729:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4240,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4239,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4241,
                                "src": "6762:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4238,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6762:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "6761:9:20"
                          },
                          "src": "6721:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6655:128:20"
                  },
                  "returnParameters": {
                    "id": 4246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4245,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4276,
                        "src": "6807:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4244,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6807:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6806:9:20"
                  },
                  "scope": 5053,
                  "src": "6626:385:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4301,
                    "nodeType": "Block",
                    "src": "7797:76:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4294,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4280,
                                "src": "7832:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              {
                                "id": 4295,
                                "name": "proofFlags",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4283,
                                "src": "7839:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                  "typeString": "bool[] memory"
                                }
                              },
                              {
                                "id": 4296,
                                "name": "leaves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4288,
                                "src": "7851:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                  "typeString": "bool[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              ],
                              "id": 4293,
                              "name": "processMultiProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4460,
                                4664
                              ],
                              "referencedDeclaration": 4460,
                              "src": "7814:17:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bool_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] memory,bool[] memory,bytes32[] memory) pure returns (bytes32)"
                              }
                            },
                            "id": 4297,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7814:44:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4298,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4285,
                            "src": "7862:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "7814:52:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4292,
                        "id": 4300,
                        "nodeType": "Return",
                        "src": "7807:59:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4277,
                    "nodeType": "StructuredDocumentation",
                    "src": "7017:593:20",
                    "text": " @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n This version handles multiproofs in memory with the default hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n The `leaves` must be validated independently. See {processMultiProof}."
                  },
                  "id": 4302,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multiProofVerify",
                  "nameLocation": "7624:16:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4289,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4280,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "7667:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "7650:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4278,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7650:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4279,
                          "nodeType": "ArrayTypeName",
                          "src": "7650:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4283,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "7696:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "7682:24:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4281,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "7682:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4282,
                          "nodeType": "ArrayTypeName",
                          "src": "7682:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4285,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "7724:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "7716:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4284,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7716:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4288,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "7755:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "7738:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4286,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7738:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4287,
                          "nodeType": "ArrayTypeName",
                          "src": "7738:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7640:127:20"
                  },
                  "returnParameters": {
                    "id": 4292,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4291,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "7791:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4290,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7791:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7790:6:20"
                  },
                  "scope": 5053,
                  "src": "7615:258:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4459,
                    "nodeType": "Block",
                    "src": "9159:2104:20",
                    "statements": [
                      {
                        "assignments": [
                          4318
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4318,
                            "mutability": "mutable",
                            "name": "leavesLen",
                            "nameLocation": "9551:9:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4459,
                            "src": "9543:17:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4317,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9543:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4321,
                        "initialValue": {
                          "expression": {
                            "id": 4319,
                            "name": "leaves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "9563:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 4320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9570:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "9563:13:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9543:33:20"
                      },
                      {
                        "assignments": [
                          4323
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4323,
                            "mutability": "mutable",
                            "name": "proofFlagsLen",
                            "nameLocation": "9594:13:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4459,
                            "src": "9586:21:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4322,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9586:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4326,
                        "initialValue": {
                          "expression": {
                            "id": 4324,
                            "name": "proofFlags",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4309,
                            "src": "9610:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                              "typeString": "bool[] memory"
                            }
                          },
                          "id": 4325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9621:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "9610:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9586:41:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4327,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4318,
                              "src": "9675:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 4328,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4306,
                                "src": "9687:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              "id": 4329,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9693:6:20",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "9687:12:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9675:24:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4331,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4323,
                              "src": "9703:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 4332,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9719:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "9703:17:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9675:45:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4339,
                        "nodeType": "IfStatement",
                        "src": "9671:113:20",
                        "trueBody": {
                          "id": 4338,
                          "nodeType": "Block",
                          "src": "9722:62:20",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4335,
                                  "name": "MerkleProofInvalidMultiproof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3988,
                                  "src": "9743:28:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 4336,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9743:30:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4337,
                              "nodeType": "RevertStatement",
                              "src": "9736:37:20"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          4344
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4344,
                            "mutability": "mutable",
                            "name": "hashes",
                            "nameLocation": "10045:6:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4459,
                            "src": "10028:23:20",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4342,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "10028:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4343,
                              "nodeType": "ArrayTypeName",
                              "src": "10028:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4350,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4348,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4323,
                              "src": "10068:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4347,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "10054:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes32[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4345,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "10058:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4346,
                              "nodeType": "ArrayTypeName",
                              "src": "10058:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            }
                          },
                          "id": 4349,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10054:28:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10028:54:20"
                      },
                      {
                        "assignments": [
                          4352
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4352,
                            "mutability": "mutable",
                            "name": "leafPos",
                            "nameLocation": "10100:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4459,
                            "src": "10092:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4351,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10092:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4354,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10110:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10092:19:20"
                      },
                      {
                        "assignments": [
                          4356
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4356,
                            "mutability": "mutable",
                            "name": "hashPos",
                            "nameLocation": "10129:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4459,
                            "src": "10121:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4355,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10121:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4358,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10139:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10121:19:20"
                      },
                      {
                        "assignments": [
                          4360
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4360,
                            "mutability": "mutable",
                            "name": "proofPos",
                            "nameLocation": "10158:8:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4459,
                            "src": "10150:16:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4359,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10150:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4362,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10169:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10150:20:20"
                      },
                      {
                        "body": {
                          "id": 4422,
                          "nodeType": "Block",
                          "src": "10590:310:20",
                          "statements": [
                            {
                              "assignments": [
                                4374
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4374,
                                  "mutability": "mutable",
                                  "name": "a",
                                  "nameLocation": "10612:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4422,
                                  "src": "10604:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4373,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10604:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4387,
                              "initialValue": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4377,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4375,
                                    "name": "leafPos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4352,
                                    "src": "10616:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "id": 4376,
                                    "name": "leavesLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4318,
                                    "src": "10626:9:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10616:19:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4382,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4344,
                                    "src": "10658:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4385,
                                  "indexExpression": {
                                    "id": 4384,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "10665:9:20",
                                    "subExpression": {
                                      "id": 4383,
                                      "name": "hashPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4356,
                                      "src": "10665:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10658:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4386,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "10616:59:20",
                                "trueExpression": {
                                  "baseExpression": {
                                    "id": 4378,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4312,
                                    "src": "10638:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4381,
                                  "indexExpression": {
                                    "id": 4380,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "10645:9:20",
                                    "subExpression": {
                                      "id": 4379,
                                      "name": "leafPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4352,
                                      "src": "10645:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10638:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10604:71:20"
                            },
                            {
                              "assignments": [
                                4389
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4389,
                                  "mutability": "mutable",
                                  "name": "b",
                                  "nameLocation": "10697:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4422,
                                  "src": "10689:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4388,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10689:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4411,
                              "initialValue": {
                                "condition": {
                                  "baseExpression": {
                                    "id": 4390,
                                    "name": "proofFlags",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4309,
                                    "src": "10701:10:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                      "typeString": "bool[] memory"
                                    }
                                  },
                                  "id": 4392,
                                  "indexExpression": {
                                    "id": 4391,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4364,
                                    "src": "10712:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10701:13:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4406,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4306,
                                    "src": "10813:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4409,
                                  "indexExpression": {
                                    "id": 4408,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "10819:10:20",
                                    "subExpression": {
                                      "id": 4407,
                                      "name": "proofPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4360,
                                      "src": "10819:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10813:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4410,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "10701:129:20",
                                "trueExpression": {
                                  "components": [
                                    {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4395,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4393,
                                          "name": "leafPos",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4352,
                                          "src": "10734:7:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 4394,
                                          "name": "leavesLen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4318,
                                          "src": "10744:9:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "10734:19:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "baseExpression": {
                                          "id": 4400,
                                          "name": "hashes",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4344,
                                          "src": "10776:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4403,
                                        "indexExpression": {
                                          "id": 4402,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "10783:9:20",
                                          "subExpression": {
                                            "id": 4401,
                                            "name": "hashPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4356,
                                            "src": "10783:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10776:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "id": 4404,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "10734:59:20",
                                      "trueExpression": {
                                        "baseExpression": {
                                          "id": 4396,
                                          "name": "leaves",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4312,
                                          "src": "10756:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4399,
                                        "indexExpression": {
                                          "id": 4398,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "10763:9:20",
                                          "subExpression": {
                                            "id": 4397,
                                            "name": "leafPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4352,
                                            "src": "10763:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10756:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "id": 4405,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10733:61:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10689:141:20"
                            },
                            {
                              "expression": {
                                "id": 4420,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 4412,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4344,
                                    "src": "10844:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4414,
                                  "indexExpression": {
                                    "id": 4413,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4364,
                                    "src": "10851:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10844:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4417,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4374,
                                      "src": "10884:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "id": 4418,
                                      "name": "b",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4389,
                                      "src": "10887:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "expression": {
                                      "id": 4415,
                                      "name": "Hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3980,
                                      "src": "10856:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Hashes_$3980_$",
                                        "typeString": "type(library Hashes)"
                                      }
                                    },
                                    "id": 4416,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "10863:20:20",
                                    "memberName": "commutativeKeccak256",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3967,
                                    "src": "10856:27:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4419,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10856:33:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10844:45:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4421,
                              "nodeType": "ExpressionStatement",
                              "src": "10844:45:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4367,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4364,
                            "src": "10566:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4368,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4323,
                            "src": "10570:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10566:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4423,
                        "initializationExpression": {
                          "assignments": [
                            4364
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4364,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "10559:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 4423,
                              "src": "10551:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4363,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "10551:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4366,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10563:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "10551:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4371,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "10585:3:20",
                            "subExpression": {
                              "id": 4370,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4364,
                              "src": "10585:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4372,
                          "nodeType": "ExpressionStatement",
                          "src": "10585:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "10546:354:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4424,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4323,
                            "src": "10914:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4425,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10930:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10914:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4446,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4444,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4318,
                              "src": "11155:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 4445,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11167:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11155:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 4456,
                            "nodeType": "Block",
                            "src": "11217:40:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 4452,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4306,
                                    "src": "11238:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4454,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 4453,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11244:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "11238:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4316,
                                "id": 4455,
                                "nodeType": "Return",
                                "src": "11231:15:20"
                              }
                            ]
                          },
                          "id": 4457,
                          "nodeType": "IfStatement",
                          "src": "11151:106:20",
                          "trueBody": {
                            "id": 4451,
                            "nodeType": "Block",
                            "src": "11170:41:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 4447,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4312,
                                    "src": "11191:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4449,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 4448,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11198:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "11191:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4316,
                                "id": 4450,
                                "nodeType": "Return",
                                "src": "11184:16:20"
                              }
                            ]
                          }
                        },
                        "id": 4458,
                        "nodeType": "IfStatement",
                        "src": "10910:347:20",
                        "trueBody": {
                          "id": 4443,
                          "nodeType": "Block",
                          "src": "10933:212:20",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4430,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4427,
                                  "name": "proofPos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4360,
                                  "src": "10951:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4428,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4306,
                                    "src": "10963:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4429,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "10969:6:20",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "10963:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10951:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 4435,
                              "nodeType": "IfStatement",
                              "src": "10947:100:20",
                              "trueBody": {
                                "id": 4434,
                                "nodeType": "Block",
                                "src": "10977:70:20",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 4431,
                                        "name": "MerkleProofInvalidMultiproof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3988,
                                        "src": "11002:28:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 4432,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11002:30:20",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 4433,
                                    "nodeType": "RevertStatement",
                                    "src": "10995:37:20"
                                  }
                                ]
                              }
                            },
                            {
                              "id": 4442,
                              "nodeType": "UncheckedBlock",
                              "src": "11060:75:20",
                              "statements": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 4436,
                                      "name": "hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4344,
                                      "src": "11095:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                        "typeString": "bytes32[] memory"
                                      }
                                    },
                                    "id": 4440,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4439,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 4437,
                                        "name": "proofFlagsLen",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4323,
                                        "src": "11102:13:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 4438,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "11118:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "11102:17:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "11095:25:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "functionReturnParameters": 4316,
                                  "id": 4441,
                                  "nodeType": "Return",
                                  "src": "11088:32:20"
                                }
                              ]
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4303,
                    "nodeType": "StructuredDocumentation",
                    "src": "7879:1100:20",
                    "text": " @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n respectively.\n This version handles multiproofs in memory with the default hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n validating the leaves elsewhere."
                  },
                  "id": 4460,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processMultiProof",
                  "nameLocation": "8993:17:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4306,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "9037:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4460,
                        "src": "9020:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4304,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "9020:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4305,
                          "nodeType": "ArrayTypeName",
                          "src": "9020:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4309,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "9066:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4460,
                        "src": "9052:24:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4307,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "9052:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4308,
                          "nodeType": "ArrayTypeName",
                          "src": "9052:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4312,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "9103:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4460,
                        "src": "9086:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4310,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "9086:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4311,
                          "nodeType": "ArrayTypeName",
                          "src": "9086:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9010:105:20"
                  },
                  "returnParameters": {
                    "id": 4316,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4315,
                        "mutability": "mutable",
                        "name": "merkleRoot",
                        "nameLocation": "9147:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4460,
                        "src": "9139:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4314,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "9139:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9138:20:20"
                  },
                  "scope": 5053,
                  "src": "8984:2279:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4496,
                    "nodeType": "Block",
                    "src": "12112:84:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4488,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4464,
                                "src": "12147:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              {
                                "id": 4489,
                                "name": "proofFlags",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4467,
                                "src": "12154:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                  "typeString": "bool[] memory"
                                }
                              },
                              {
                                "id": 4490,
                                "name": "leaves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4472,
                                "src": "12166:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              {
                                "id": 4491,
                                "name": "hasher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4482,
                                "src": "12174:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                  "typeString": "bool[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                },
                                {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              ],
                              "id": 4487,
                              "name": "processMultiProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4460,
                                4664
                              ],
                              "referencedDeclaration": 4664,
                              "src": "12129:17:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bool_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] memory,bool[] memory,bytes32[] memory,function (bytes32,bytes32) view returns (bytes32)) view returns (bytes32)"
                              }
                            },
                            "id": 4492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12129:52:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4493,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4469,
                            "src": "12185:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "12129:60:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4486,
                        "id": 4495,
                        "nodeType": "Return",
                        "src": "12122:67:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4461,
                    "nodeType": "StructuredDocumentation",
                    "src": "11269:590:20",
                    "text": " @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n This version handles multiproofs in memory with a custom hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n The `leaves` must be validated independently. See {processMultiProof}."
                  },
                  "id": 4497,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multiProofVerify",
                  "nameLocation": "11873:16:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4483,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4464,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "11916:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4497,
                        "src": "11899:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4462,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "11899:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4463,
                          "nodeType": "ArrayTypeName",
                          "src": "11899:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4467,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "11945:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4497,
                        "src": "11931:24:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4465,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "11931:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4466,
                          "nodeType": "ArrayTypeName",
                          "src": "11931:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4469,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "11973:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4497,
                        "src": "11965:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4468,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "11965:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4472,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "12004:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4497,
                        "src": "11987:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4470,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "11987:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4471,
                          "nodeType": "ArrayTypeName",
                          "src": "11987:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4482,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "12070:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4497,
                        "src": "12020:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4481,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4477,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4474,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4481,
                                "src": "12029:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4473,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12029:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4476,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4481,
                                "src": "12038:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4475,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12038:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "12028:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4480,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4479,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4481,
                                "src": "12061:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4478,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12061:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "12060:9:20"
                          },
                          "src": "12020:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11889:193:20"
                  },
                  "returnParameters": {
                    "id": 4486,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4485,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4497,
                        "src": "12106:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4484,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12106:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12105:6:20"
                  },
                  "scope": 5053,
                  "src": "11864:332:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4663,
                    "nodeType": "Block",
                    "src": "13545:2083:20",
                    "statements": [
                      {
                        "assignments": [
                          4523
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4523,
                            "mutability": "mutable",
                            "name": "leavesLen",
                            "nameLocation": "13937:9:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4663,
                            "src": "13929:17:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4522,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13929:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4526,
                        "initialValue": {
                          "expression": {
                            "id": 4524,
                            "name": "leaves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4507,
                            "src": "13949:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 4525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13956:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "13949:13:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13929:33:20"
                      },
                      {
                        "assignments": [
                          4528
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4528,
                            "mutability": "mutable",
                            "name": "proofFlagsLen",
                            "nameLocation": "13980:13:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4663,
                            "src": "13972:21:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4527,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13972:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4531,
                        "initialValue": {
                          "expression": {
                            "id": 4529,
                            "name": "proofFlags",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4504,
                            "src": "13996:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                              "typeString": "bool[] memory"
                            }
                          },
                          "id": 4530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14007:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "13996:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13972:41:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4532,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4523,
                              "src": "14061:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 4533,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4501,
                                "src": "14073:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              "id": 4534,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14079:6:20",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "14073:12:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "14061:24:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4536,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4528,
                              "src": "14089:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 4537,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14105:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "14089:17:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14061:45:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4544,
                        "nodeType": "IfStatement",
                        "src": "14057:113:20",
                        "trueBody": {
                          "id": 4543,
                          "nodeType": "Block",
                          "src": "14108:62:20",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4540,
                                  "name": "MerkleProofInvalidMultiproof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3988,
                                  "src": "14129:28:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 4541,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14129:30:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4542,
                              "nodeType": "RevertStatement",
                              "src": "14122:37:20"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          4549
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4549,
                            "mutability": "mutable",
                            "name": "hashes",
                            "nameLocation": "14431:6:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4663,
                            "src": "14414:23:20",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4547,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "14414:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4548,
                              "nodeType": "ArrayTypeName",
                              "src": "14414:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4555,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4553,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4528,
                              "src": "14454:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "14440:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes32[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4550,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "14444:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4551,
                              "nodeType": "ArrayTypeName",
                              "src": "14444:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            }
                          },
                          "id": 4554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14440:28:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14414:54:20"
                      },
                      {
                        "assignments": [
                          4557
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4557,
                            "mutability": "mutable",
                            "name": "leafPos",
                            "nameLocation": "14486:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4663,
                            "src": "14478:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4556,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "14478:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4559,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14496:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14478:19:20"
                      },
                      {
                        "assignments": [
                          4561
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4561,
                            "mutability": "mutable",
                            "name": "hashPos",
                            "nameLocation": "14515:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4663,
                            "src": "14507:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4560,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "14507:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4563,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4562,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14525:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14507:19:20"
                      },
                      {
                        "assignments": [
                          4565
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4565,
                            "mutability": "mutable",
                            "name": "proofPos",
                            "nameLocation": "14544:8:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4663,
                            "src": "14536:16:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4564,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "14536:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4567,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4566,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14555:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14536:20:20"
                      },
                      {
                        "body": {
                          "id": 4626,
                          "nodeType": "Block",
                          "src": "14976:289:20",
                          "statements": [
                            {
                              "assignments": [
                                4579
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4579,
                                  "mutability": "mutable",
                                  "name": "a",
                                  "nameLocation": "14998:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4626,
                                  "src": "14990:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4578,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14990:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4592,
                              "initialValue": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4582,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4580,
                                    "name": "leafPos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4557,
                                    "src": "15002:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "id": 4581,
                                    "name": "leavesLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4523,
                                    "src": "15012:9:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15002:19:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4587,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4549,
                                    "src": "15044:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4590,
                                  "indexExpression": {
                                    "id": 4589,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "15051:9:20",
                                    "subExpression": {
                                      "id": 4588,
                                      "name": "hashPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4561,
                                      "src": "15051:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15044:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "15002:59:20",
                                "trueExpression": {
                                  "baseExpression": {
                                    "id": 4583,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4507,
                                    "src": "15024:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4586,
                                  "indexExpression": {
                                    "id": 4585,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "15031:9:20",
                                    "subExpression": {
                                      "id": 4584,
                                      "name": "leafPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4557,
                                      "src": "15031:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15024:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14990:71:20"
                            },
                            {
                              "assignments": [
                                4594
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4594,
                                  "mutability": "mutable",
                                  "name": "b",
                                  "nameLocation": "15083:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4626,
                                  "src": "15075:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4593,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15075:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4616,
                              "initialValue": {
                                "condition": {
                                  "baseExpression": {
                                    "id": 4595,
                                    "name": "proofFlags",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4504,
                                    "src": "15087:10:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                      "typeString": "bool[] memory"
                                    }
                                  },
                                  "id": 4597,
                                  "indexExpression": {
                                    "id": 4596,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4569,
                                    "src": "15098:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15087:13:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4611,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4501,
                                    "src": "15199:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4614,
                                  "indexExpression": {
                                    "id": 4613,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "15205:10:20",
                                    "subExpression": {
                                      "id": 4612,
                                      "name": "proofPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4565,
                                      "src": "15205:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15199:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "15087:129:20",
                                "trueExpression": {
                                  "components": [
                                    {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4600,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4598,
                                          "name": "leafPos",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4557,
                                          "src": "15120:7:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 4599,
                                          "name": "leavesLen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4523,
                                          "src": "15130:9:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "15120:19:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "baseExpression": {
                                          "id": 4605,
                                          "name": "hashes",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4549,
                                          "src": "15162:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4608,
                                        "indexExpression": {
                                          "id": 4607,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "15169:9:20",
                                          "subExpression": {
                                            "id": 4606,
                                            "name": "hashPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4561,
                                            "src": "15169:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "15162:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "id": 4609,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "15120:59:20",
                                      "trueExpression": {
                                        "baseExpression": {
                                          "id": 4601,
                                          "name": "leaves",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4507,
                                          "src": "15142:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4604,
                                        "indexExpression": {
                                          "id": 4603,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "15149:9:20",
                                          "subExpression": {
                                            "id": 4602,
                                            "name": "leafPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4557,
                                            "src": "15149:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "15142:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "id": 4610,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "15119:61:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15075:141:20"
                            },
                            {
                              "expression": {
                                "id": 4624,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 4617,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4549,
                                    "src": "15230:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4619,
                                  "indexExpression": {
                                    "id": 4618,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4569,
                                    "src": "15237:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "15230:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4621,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4579,
                                      "src": "15249:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "id": 4622,
                                      "name": "b",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4594,
                                      "src": "15252:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 4620,
                                    "name": "hasher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4517,
                                    "src": "15242:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                    }
                                  },
                                  "id": 4623,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15242:12:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "15230:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4625,
                              "nodeType": "ExpressionStatement",
                              "src": "15230:24:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4572,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4569,
                            "src": "14952:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4573,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4528,
                            "src": "14956:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14952:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4627,
                        "initializationExpression": {
                          "assignments": [
                            4569
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4569,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "14945:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 4627,
                              "src": "14937:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4568,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "14937:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4571,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14949:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "14937:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "14971:3:20",
                            "subExpression": {
                              "id": 4575,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4569,
                              "src": "14971:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4577,
                          "nodeType": "ExpressionStatement",
                          "src": "14971:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "14932:333:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4628,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4528,
                            "src": "15279:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4629,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15295:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15279:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4648,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4523,
                              "src": "15520:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 4649,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15532:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "15520:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 4660,
                            "nodeType": "Block",
                            "src": "15582:40:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 4656,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4501,
                                    "src": "15603:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4658,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 4657,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15609:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15603:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4521,
                                "id": 4659,
                                "nodeType": "Return",
                                "src": "15596:15:20"
                              }
                            ]
                          },
                          "id": 4661,
                          "nodeType": "IfStatement",
                          "src": "15516:106:20",
                          "trueBody": {
                            "id": 4655,
                            "nodeType": "Block",
                            "src": "15535:41:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 4651,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4507,
                                    "src": "15556:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4653,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 4652,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15563:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15556:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4521,
                                "id": 4654,
                                "nodeType": "Return",
                                "src": "15549:16:20"
                              }
                            ]
                          }
                        },
                        "id": 4662,
                        "nodeType": "IfStatement",
                        "src": "15275:347:20",
                        "trueBody": {
                          "id": 4647,
                          "nodeType": "Block",
                          "src": "15298:212:20",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4634,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4631,
                                  "name": "proofPos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4565,
                                  "src": "15316:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4632,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4501,
                                    "src": "15328:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4633,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "15334:6:20",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "15328:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15316:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 4639,
                              "nodeType": "IfStatement",
                              "src": "15312:100:20",
                              "trueBody": {
                                "id": 4638,
                                "nodeType": "Block",
                                "src": "15342:70:20",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 4635,
                                        "name": "MerkleProofInvalidMultiproof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3988,
                                        "src": "15367:28:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 4636,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15367:30:20",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 4637,
                                    "nodeType": "RevertStatement",
                                    "src": "15360:37:20"
                                  }
                                ]
                              }
                            },
                            {
                              "id": 4646,
                              "nodeType": "UncheckedBlock",
                              "src": "15425:75:20",
                              "statements": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 4640,
                                      "name": "hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4549,
                                      "src": "15460:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                        "typeString": "bytes32[] memory"
                                      }
                                    },
                                    "id": 4644,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4643,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 4641,
                                        "name": "proofFlagsLen",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4528,
                                        "src": "15467:13:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 4642,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "15483:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "15467:17:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "15460:25:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "functionReturnParameters": 4521,
                                  "id": 4645,
                                  "nodeType": "Return",
                                  "src": "15453:32:20"
                                }
                              ]
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4498,
                    "nodeType": "StructuredDocumentation",
                    "src": "12202:1097:20",
                    "text": " @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n respectively.\n This version handles multiproofs in memory with a custom hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n validating the leaves elsewhere."
                  },
                  "id": 4664,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processMultiProof",
                  "nameLocation": "13313:17:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4518,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4501,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "13357:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4664,
                        "src": "13340:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4499,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "13340:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4500,
                          "nodeType": "ArrayTypeName",
                          "src": "13340:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4504,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "13386:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4664,
                        "src": "13372:24:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4502,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "13372:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4503,
                          "nodeType": "ArrayTypeName",
                          "src": "13372:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4507,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "13423:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4664,
                        "src": "13406:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4505,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "13406:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4506,
                          "nodeType": "ArrayTypeName",
                          "src": "13406:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4517,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "13489:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4664,
                        "src": "13439:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4516,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4512,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4509,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4516,
                                "src": "13448:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4508,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13448:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4511,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4516,
                                "src": "13457:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4510,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13457:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "13447:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4515,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4514,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4516,
                                "src": "13480:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4513,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13480:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "13479:9:20"
                          },
                          "src": "13439:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13330:171:20"
                  },
                  "returnParameters": {
                    "id": 4521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4520,
                        "mutability": "mutable",
                        "name": "merkleRoot",
                        "nameLocation": "13533:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4664,
                        "src": "13525:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4519,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "13525:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13524:20:20"
                  },
                  "scope": 5053,
                  "src": "13304:2324:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4689,
                    "nodeType": "Block",
                    "src": "16436:84:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4687,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4682,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4668,
                                "src": "16479:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                }
                              },
                              {
                                "id": 4683,
                                "name": "proofFlags",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4671,
                                "src": "16486:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                                  "typeString": "bool[] calldata"
                                }
                              },
                              {
                                "id": 4684,
                                "name": "leaves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4676,
                                "src": "16498:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                                  "typeString": "bool[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              ],
                              "id": 4681,
                              "name": "processMultiProofCalldata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4848,
                                5052
                              ],
                              "referencedDeclaration": 4848,
                              "src": "16453:25:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_array$_t_bool_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] calldata,bool[] calldata,bytes32[] memory) pure returns (bytes32)"
                              }
                            },
                            "id": 4685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16453:52:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4686,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4673,
                            "src": "16509:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "16453:60:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4680,
                        "id": 4688,
                        "nodeType": "Return",
                        "src": "16446:67:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4665,
                    "nodeType": "StructuredDocumentation",
                    "src": "15634:603:20",
                    "text": " @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n This version handles multiproofs in calldata with the default hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n The `leaves` must be validated independently. See {processMultiProofCalldata}."
                  },
                  "id": 4690,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multiProofVerifyCalldata",
                  "nameLocation": "16251:24:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4677,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4668,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "16304:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4690,
                        "src": "16285:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4666,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "16285:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4667,
                          "nodeType": "ArrayTypeName",
                          "src": "16285:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4671,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "16335:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4690,
                        "src": "16319:26:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4669,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "16319:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4670,
                          "nodeType": "ArrayTypeName",
                          "src": "16319:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4673,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "16363:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4690,
                        "src": "16355:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4672,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "16355:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4676,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "16394:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4690,
                        "src": "16377:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4674,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "16377:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4675,
                          "nodeType": "ArrayTypeName",
                          "src": "16377:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16275:131:20"
                  },
                  "returnParameters": {
                    "id": 4680,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4679,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4690,
                        "src": "16430:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4678,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "16430:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16429:6:20"
                  },
                  "scope": 5053,
                  "src": "16242:278:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4847,
                    "nodeType": "Block",
                    "src": "17820:2104:20",
                    "statements": [
                      {
                        "assignments": [
                          4706
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4706,
                            "mutability": "mutable",
                            "name": "leavesLen",
                            "nameLocation": "18212:9:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4847,
                            "src": "18204:17:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4705,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "18204:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4709,
                        "initialValue": {
                          "expression": {
                            "id": 4707,
                            "name": "leaves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4700,
                            "src": "18224:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 4708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "18231:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "18224:13:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18204:33:20"
                      },
                      {
                        "assignments": [
                          4711
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4711,
                            "mutability": "mutable",
                            "name": "proofFlagsLen",
                            "nameLocation": "18255:13:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4847,
                            "src": "18247:21:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4710,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "18247:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4714,
                        "initialValue": {
                          "expression": {
                            "id": 4712,
                            "name": "proofFlags",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4697,
                            "src": "18271:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                              "typeString": "bool[] calldata"
                            }
                          },
                          "id": 4713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "18282:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "18271:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18247:41:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4718,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4715,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4706,
                              "src": "18336:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 4716,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4694,
                                "src": "18348:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                }
                              },
                              "id": 4717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "18354:6:20",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "18348:12:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18336:24:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4719,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4711,
                              "src": "18364:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 4720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18380:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "18364:17:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18336:45:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4727,
                        "nodeType": "IfStatement",
                        "src": "18332:113:20",
                        "trueBody": {
                          "id": 4726,
                          "nodeType": "Block",
                          "src": "18383:62:20",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4723,
                                  "name": "MerkleProofInvalidMultiproof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3988,
                                  "src": "18404:28:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 4724,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18404:30:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4725,
                              "nodeType": "RevertStatement",
                              "src": "18397:37:20"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          4732
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4732,
                            "mutability": "mutable",
                            "name": "hashes",
                            "nameLocation": "18706:6:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4847,
                            "src": "18689:23:20",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4730,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "18689:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4731,
                              "nodeType": "ArrayTypeName",
                              "src": "18689:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4738,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4736,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4711,
                              "src": "18729:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "18715:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes32[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4733,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "18719:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4734,
                              "nodeType": "ArrayTypeName",
                              "src": "18719:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            }
                          },
                          "id": 4737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18715:28:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18689:54:20"
                      },
                      {
                        "assignments": [
                          4740
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4740,
                            "mutability": "mutable",
                            "name": "leafPos",
                            "nameLocation": "18761:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4847,
                            "src": "18753:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4739,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "18753:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4742,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18771:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18753:19:20"
                      },
                      {
                        "assignments": [
                          4744
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4744,
                            "mutability": "mutable",
                            "name": "hashPos",
                            "nameLocation": "18790:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4847,
                            "src": "18782:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4743,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "18782:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4746,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18800:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18782:19:20"
                      },
                      {
                        "assignments": [
                          4748
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4748,
                            "mutability": "mutable",
                            "name": "proofPos",
                            "nameLocation": "18819:8:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4847,
                            "src": "18811:16:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4747,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "18811:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4750,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18830:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18811:20:20"
                      },
                      {
                        "body": {
                          "id": 4810,
                          "nodeType": "Block",
                          "src": "19251:310:20",
                          "statements": [
                            {
                              "assignments": [
                                4762
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4762,
                                  "mutability": "mutable",
                                  "name": "a",
                                  "nameLocation": "19273:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4810,
                                  "src": "19265:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4761,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "19265:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4775,
                              "initialValue": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4763,
                                    "name": "leafPos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4740,
                                    "src": "19277:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "id": 4764,
                                    "name": "leavesLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4706,
                                    "src": "19287:9:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "19277:19:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4770,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4732,
                                    "src": "19319:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4773,
                                  "indexExpression": {
                                    "id": 4772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "19326:9:20",
                                    "subExpression": {
                                      "id": 4771,
                                      "name": "hashPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4744,
                                      "src": "19326:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19319:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4774,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "19277:59:20",
                                "trueExpression": {
                                  "baseExpression": {
                                    "id": 4766,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4700,
                                    "src": "19299:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4769,
                                  "indexExpression": {
                                    "id": 4768,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "19306:9:20",
                                    "subExpression": {
                                      "id": 4767,
                                      "name": "leafPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4740,
                                      "src": "19306:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19299:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "19265:71:20"
                            },
                            {
                              "assignments": [
                                4777
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4777,
                                  "mutability": "mutable",
                                  "name": "b",
                                  "nameLocation": "19358:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4810,
                                  "src": "19350:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4776,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "19350:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4799,
                              "initialValue": {
                                "condition": {
                                  "baseExpression": {
                                    "id": 4778,
                                    "name": "proofFlags",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4697,
                                    "src": "19362:10:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                                      "typeString": "bool[] calldata"
                                    }
                                  },
                                  "id": 4780,
                                  "indexExpression": {
                                    "id": 4779,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4752,
                                    "src": "19373:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19362:13:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4794,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4694,
                                    "src": "19474:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  },
                                  "id": 4797,
                                  "indexExpression": {
                                    "id": 4796,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "19480:10:20",
                                    "subExpression": {
                                      "id": 4795,
                                      "name": "proofPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4748,
                                      "src": "19480:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19474:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4798,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "19362:129:20",
                                "trueExpression": {
                                  "components": [
                                    {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4783,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4781,
                                          "name": "leafPos",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4740,
                                          "src": "19395:7:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 4782,
                                          "name": "leavesLen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4706,
                                          "src": "19405:9:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "19395:19:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "baseExpression": {
                                          "id": 4788,
                                          "name": "hashes",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4732,
                                          "src": "19437:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4791,
                                        "indexExpression": {
                                          "id": 4790,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "19444:9:20",
                                          "subExpression": {
                                            "id": 4789,
                                            "name": "hashPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4744,
                                            "src": "19444:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "19437:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "id": 4792,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "19395:59:20",
                                      "trueExpression": {
                                        "baseExpression": {
                                          "id": 4784,
                                          "name": "leaves",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4700,
                                          "src": "19417:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4787,
                                        "indexExpression": {
                                          "id": 4786,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "19424:9:20",
                                          "subExpression": {
                                            "id": 4785,
                                            "name": "leafPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4740,
                                            "src": "19424:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "19417:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "id": 4793,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "19394:61:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "19350:141:20"
                            },
                            {
                              "expression": {
                                "id": 4808,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 4800,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4732,
                                    "src": "19505:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4802,
                                  "indexExpression": {
                                    "id": 4801,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4752,
                                    "src": "19512:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "19505:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4805,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4762,
                                      "src": "19545:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "id": 4806,
                                      "name": "b",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4777,
                                      "src": "19548:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "expression": {
                                      "id": 4803,
                                      "name": "Hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3980,
                                      "src": "19517:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Hashes_$3980_$",
                                        "typeString": "type(library Hashes)"
                                      }
                                    },
                                    "id": 4804,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "19524:20:20",
                                    "memberName": "commutativeKeccak256",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3967,
                                    "src": "19517:27:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4807,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19517:33:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "19505:45:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4809,
                              "nodeType": "ExpressionStatement",
                              "src": "19505:45:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4755,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4752,
                            "src": "19227:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4756,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4711,
                            "src": "19231:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19227:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4811,
                        "initializationExpression": {
                          "assignments": [
                            4752
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4752,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "19220:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 4811,
                              "src": "19212:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4751,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "19212:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4754,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19224:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "19212:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "19246:3:20",
                            "subExpression": {
                              "id": 4758,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4752,
                              "src": "19246:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4760,
                          "nodeType": "ExpressionStatement",
                          "src": "19246:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "19207:354:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4812,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4711,
                            "src": "19575:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4813,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19591:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19575:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4834,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4832,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4706,
                              "src": "19816:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 4833,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19828:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "19816:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 4844,
                            "nodeType": "Block",
                            "src": "19878:40:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 4840,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4694,
                                    "src": "19899:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  },
                                  "id": 4842,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 4841,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19905:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19899:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4704,
                                "id": 4843,
                                "nodeType": "Return",
                                "src": "19892:15:20"
                              }
                            ]
                          },
                          "id": 4845,
                          "nodeType": "IfStatement",
                          "src": "19812:106:20",
                          "trueBody": {
                            "id": 4839,
                            "nodeType": "Block",
                            "src": "19831:41:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 4835,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4700,
                                    "src": "19852:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4837,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 4836,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19859:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19852:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4704,
                                "id": 4838,
                                "nodeType": "Return",
                                "src": "19845:16:20"
                              }
                            ]
                          }
                        },
                        "id": 4846,
                        "nodeType": "IfStatement",
                        "src": "19571:347:20",
                        "trueBody": {
                          "id": 4831,
                          "nodeType": "Block",
                          "src": "19594:212:20",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4818,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4815,
                                  "name": "proofPos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4748,
                                  "src": "19612:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4816,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4694,
                                    "src": "19624:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  },
                                  "id": 4817,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "19630:6:20",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "19624:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "19612:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 4823,
                              "nodeType": "IfStatement",
                              "src": "19608:100:20",
                              "trueBody": {
                                "id": 4822,
                                "nodeType": "Block",
                                "src": "19638:70:20",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 4819,
                                        "name": "MerkleProofInvalidMultiproof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3988,
                                        "src": "19663:28:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 4820,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "19663:30:20",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 4821,
                                    "nodeType": "RevertStatement",
                                    "src": "19656:37:20"
                                  }
                                ]
                              }
                            },
                            {
                              "id": 4830,
                              "nodeType": "UncheckedBlock",
                              "src": "19721:75:20",
                              "statements": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 4824,
                                      "name": "hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4732,
                                      "src": "19756:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                        "typeString": "bytes32[] memory"
                                      }
                                    },
                                    "id": 4828,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4827,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 4825,
                                        "name": "proofFlagsLen",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4711,
                                        "src": "19763:13:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 4826,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19779:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "19763:17:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "19756:25:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "functionReturnParameters": 4704,
                                  "id": 4829,
                                  "nodeType": "Return",
                                  "src": "19749:32:20"
                                }
                              ]
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4691,
                    "nodeType": "StructuredDocumentation",
                    "src": "16526:1102:20",
                    "text": " @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n respectively.\n This version handles multiproofs in calldata with the default hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n validating the leaves elsewhere."
                  },
                  "id": 4848,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processMultiProofCalldata",
                  "nameLocation": "17642:25:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4701,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4694,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "17696:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4848,
                        "src": "17677:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4692,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "17677:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4693,
                          "nodeType": "ArrayTypeName",
                          "src": "17677:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4697,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "17727:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4848,
                        "src": "17711:26:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4695,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "17711:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4696,
                          "nodeType": "ArrayTypeName",
                          "src": "17711:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4700,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "17764:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4848,
                        "src": "17747:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4698,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "17747:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4699,
                          "nodeType": "ArrayTypeName",
                          "src": "17747:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17667:109:20"
                  },
                  "returnParameters": {
                    "id": 4704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4703,
                        "mutability": "mutable",
                        "name": "merkleRoot",
                        "nameLocation": "17808:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4848,
                        "src": "17800:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4702,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "17800:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17799:20:20"
                  },
                  "scope": 5053,
                  "src": "17633:2291:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4884,
                    "nodeType": "Block",
                    "src": "20795:92:20",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4876,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4852,
                                "src": "20838:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                }
                              },
                              {
                                "id": 4877,
                                "name": "proofFlags",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4855,
                                "src": "20845:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                                  "typeString": "bool[] calldata"
                                }
                              },
                              {
                                "id": 4878,
                                "name": "leaves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4860,
                                "src": "20857:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              {
                                "id": 4879,
                                "name": "hasher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4870,
                                "src": "20865:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                                  "typeString": "bool[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                },
                                {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                }
                              ],
                              "id": 4875,
                              "name": "processMultiProofCalldata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                4848,
                                5052
                              ],
                              "referencedDeclaration": 5052,
                              "src": "20812:25:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_array$_t_bool_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32[] calldata,bool[] calldata,bytes32[] memory,function (bytes32,bytes32) view returns (bytes32)) view returns (bytes32)"
                              }
                            },
                            "id": 4880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20812:60:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4881,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4857,
                            "src": "20876:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "20812:68:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4874,
                        "id": 4883,
                        "nodeType": "Return",
                        "src": "20805:75:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4849,
                    "nodeType": "StructuredDocumentation",
                    "src": "19930:600:20",
                    "text": " @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by\n `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.\n This version handles multiproofs in calldata with a custom hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.\n NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.\n The `leaves` must be validated independently. See {processMultiProofCalldata}."
                  },
                  "id": 4885,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multiProofVerifyCalldata",
                  "nameLocation": "20544:24:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4871,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4852,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "20597:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4885,
                        "src": "20578:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4850,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "20578:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4851,
                          "nodeType": "ArrayTypeName",
                          "src": "20578:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4855,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "20628:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4885,
                        "src": "20612:26:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4853,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "20612:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4854,
                          "nodeType": "ArrayTypeName",
                          "src": "20612:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4857,
                        "mutability": "mutable",
                        "name": "root",
                        "nameLocation": "20656:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4885,
                        "src": "20648:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4856,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "20648:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4860,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "20687:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4885,
                        "src": "20670:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4858,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "20670:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4859,
                          "nodeType": "ArrayTypeName",
                          "src": "20670:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4870,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "20753:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4885,
                        "src": "20703:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4869,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4865,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4862,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4869,
                                "src": "20712:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4861,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "20712:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4864,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4869,
                                "src": "20721:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4863,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "20721:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "20711:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4868,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4867,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4869,
                                "src": "20744:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4866,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "20744:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "20743:9:20"
                          },
                          "src": "20703:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20568:197:20"
                  },
                  "returnParameters": {
                    "id": 4874,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4873,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4885,
                        "src": "20789:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4872,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "20789:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20788:6:20"
                  },
                  "scope": 5053,
                  "src": "20535:352:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5051,
                    "nodeType": "Block",
                    "src": "22250:2083:20",
                    "statements": [
                      {
                        "assignments": [
                          4911
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4911,
                            "mutability": "mutable",
                            "name": "leavesLen",
                            "nameLocation": "22642:9:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 5051,
                            "src": "22634:17:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4910,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "22634:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4914,
                        "initialValue": {
                          "expression": {
                            "id": 4912,
                            "name": "leaves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4895,
                            "src": "22654:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 4913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22661:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "22654:13:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22634:33:20"
                      },
                      {
                        "assignments": [
                          4916
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4916,
                            "mutability": "mutable",
                            "name": "proofFlagsLen",
                            "nameLocation": "22685:13:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 5051,
                            "src": "22677:21:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4915,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "22677:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4919,
                        "initialValue": {
                          "expression": {
                            "id": 4917,
                            "name": "proofFlags",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4892,
                            "src": "22701:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                              "typeString": "bool[] calldata"
                            }
                          },
                          "id": 4918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22712:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "22701:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22677:41:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4923,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4920,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4911,
                              "src": "22766:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 4921,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4889,
                                "src": "22778:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                  "typeString": "bytes32[] calldata"
                                }
                              },
                              "id": 4922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "22784:6:20",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "22778:12:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "22766:24:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4924,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4916,
                              "src": "22794:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 4925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22810:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "22794:17:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22766:45:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4932,
                        "nodeType": "IfStatement",
                        "src": "22762:113:20",
                        "trueBody": {
                          "id": 4931,
                          "nodeType": "Block",
                          "src": "22813:62:20",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4928,
                                  "name": "MerkleProofInvalidMultiproof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3988,
                                  "src": "22834:28:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 4929,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22834:30:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4930,
                              "nodeType": "RevertStatement",
                              "src": "22827:37:20"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          4937
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4937,
                            "mutability": "mutable",
                            "name": "hashes",
                            "nameLocation": "23136:6:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 5051,
                            "src": "23119:23:20",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4935,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "23119:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4936,
                              "nodeType": "ArrayTypeName",
                              "src": "23119:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4943,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4941,
                              "name": "proofFlagsLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4916,
                              "src": "23159:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4940,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "23145:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes32[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4938,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "23149:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 4939,
                              "nodeType": "ArrayTypeName",
                              "src": "23149:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            }
                          },
                          "id": 4942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23145:28:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23119:54:20"
                      },
                      {
                        "assignments": [
                          4945
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4945,
                            "mutability": "mutable",
                            "name": "leafPos",
                            "nameLocation": "23191:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 5051,
                            "src": "23183:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4944,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "23183:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4947,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23201:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23183:19:20"
                      },
                      {
                        "assignments": [
                          4949
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4949,
                            "mutability": "mutable",
                            "name": "hashPos",
                            "nameLocation": "23220:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 5051,
                            "src": "23212:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4948,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "23212:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4951,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23230:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23212:19:20"
                      },
                      {
                        "assignments": [
                          4953
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4953,
                            "mutability": "mutable",
                            "name": "proofPos",
                            "nameLocation": "23249:8:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 5051,
                            "src": "23241:16:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4952,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "23241:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4955,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4954,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23260:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23241:20:20"
                      },
                      {
                        "body": {
                          "id": 5014,
                          "nodeType": "Block",
                          "src": "23681:289:20",
                          "statements": [
                            {
                              "assignments": [
                                4967
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4967,
                                  "mutability": "mutable",
                                  "name": "a",
                                  "nameLocation": "23703:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 5014,
                                  "src": "23695:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4966,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "23695:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4980,
                              "initialValue": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4970,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4968,
                                    "name": "leafPos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4945,
                                    "src": "23707:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "id": 4969,
                                    "name": "leavesLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4911,
                                    "src": "23717:9:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "23707:19:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4975,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4937,
                                    "src": "23749:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4978,
                                  "indexExpression": {
                                    "id": 4977,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "23756:9:20",
                                    "subExpression": {
                                      "id": 4976,
                                      "name": "hashPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4949,
                                      "src": "23756:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "23749:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "23707:59:20",
                                "trueExpression": {
                                  "baseExpression": {
                                    "id": 4971,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4895,
                                    "src": "23729:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 4974,
                                  "indexExpression": {
                                    "id": 4973,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "23736:9:20",
                                    "subExpression": {
                                      "id": 4972,
                                      "name": "leafPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4945,
                                      "src": "23736:7:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "23729:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "23695:71:20"
                            },
                            {
                              "assignments": [
                                4982
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4982,
                                  "mutability": "mutable",
                                  "name": "b",
                                  "nameLocation": "23788:1:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 5014,
                                  "src": "23780:9:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 4981,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "23780:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 5004,
                              "initialValue": {
                                "condition": {
                                  "baseExpression": {
                                    "id": 4983,
                                    "name": "proofFlags",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4892,
                                    "src": "23792:10:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                                      "typeString": "bool[] calldata"
                                    }
                                  },
                                  "id": 4985,
                                  "indexExpression": {
                                    "id": 4984,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4957,
                                    "src": "23803:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "23792:13:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "baseExpression": {
                                    "id": 4999,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4889,
                                    "src": "23904:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  },
                                  "id": 5002,
                                  "indexExpression": {
                                    "id": 5001,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "23910:10:20",
                                    "subExpression": {
                                      "id": 5000,
                                      "name": "proofPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4953,
                                      "src": "23910:8:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "23904:17:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 5003,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "23792:129:20",
                                "trueExpression": {
                                  "components": [
                                    {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4988,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4986,
                                          "name": "leafPos",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4945,
                                          "src": "23825:7:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 4987,
                                          "name": "leavesLen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4911,
                                          "src": "23835:9:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "23825:19:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "baseExpression": {
                                          "id": 4993,
                                          "name": "hashes",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4937,
                                          "src": "23867:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4996,
                                        "indexExpression": {
                                          "id": 4995,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "23874:9:20",
                                          "subExpression": {
                                            "id": 4994,
                                            "name": "hashPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4949,
                                            "src": "23874:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "23867:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "id": 4997,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "23825:59:20",
                                      "trueExpression": {
                                        "baseExpression": {
                                          "id": 4989,
                                          "name": "leaves",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4895,
                                          "src": "23847:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                            "typeString": "bytes32[] memory"
                                          }
                                        },
                                        "id": 4992,
                                        "indexExpression": {
                                          "id": 4991,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "23854:9:20",
                                          "subExpression": {
                                            "id": 4990,
                                            "name": "leafPos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4945,
                                            "src": "23854:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "23847:17:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "id": 4998,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "23824:61:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "23780:141:20"
                            },
                            {
                              "expression": {
                                "id": 5012,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 5005,
                                    "name": "hashes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4937,
                                    "src": "23935:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 5007,
                                  "indexExpression": {
                                    "id": 5006,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4957,
                                    "src": "23942:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "23935:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 5009,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4967,
                                      "src": "23954:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    {
                                      "id": 5010,
                                      "name": "b",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4982,
                                      "src": "23957:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 5008,
                                    "name": "hasher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4905,
                                    "src": "23947:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                                    }
                                  },
                                  "id": 5011,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23947:12:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "23935:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 5013,
                              "nodeType": "ExpressionStatement",
                              "src": "23935:24:20"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4960,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4957,
                            "src": "23657:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4961,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4916,
                            "src": "23661:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23657:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5015,
                        "initializationExpression": {
                          "assignments": [
                            4957
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4957,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "23650:1:20",
                              "nodeType": "VariableDeclaration",
                              "scope": 5015,
                              "src": "23642:9:20",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4956,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "23642:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4959,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "23654:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "23642:13:20"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 4964,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "23676:3:20",
                            "subExpression": {
                              "id": 4963,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4957,
                              "src": "23676:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4965,
                          "nodeType": "ExpressionStatement",
                          "src": "23676:3:20"
                        },
                        "nodeType": "ForStatement",
                        "src": "23637:333:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5018,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5016,
                            "name": "proofFlagsLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4916,
                            "src": "23984:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5017,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24000:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "23984:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5038,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5036,
                              "name": "leavesLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4911,
                              "src": "24225:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 5037,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24237:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "24225:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 5048,
                            "nodeType": "Block",
                            "src": "24287:40:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 5044,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4889,
                                    "src": "24308:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  },
                                  "id": 5046,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 5045,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "24314:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "24308:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4909,
                                "id": 5047,
                                "nodeType": "Return",
                                "src": "24301:15:20"
                              }
                            ]
                          },
                          "id": 5049,
                          "nodeType": "IfStatement",
                          "src": "24221:106:20",
                          "trueBody": {
                            "id": 5043,
                            "nodeType": "Block",
                            "src": "24240:41:20",
                            "statements": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 5039,
                                    "name": "leaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4895,
                                    "src": "24261:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                      "typeString": "bytes32[] memory"
                                    }
                                  },
                                  "id": 5041,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 5040,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "24268:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "24261:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 4909,
                                "id": 5042,
                                "nodeType": "Return",
                                "src": "24254:16:20"
                              }
                            ]
                          }
                        },
                        "id": 5050,
                        "nodeType": "IfStatement",
                        "src": "23980:347:20",
                        "trueBody": {
                          "id": 5035,
                          "nodeType": "Block",
                          "src": "24003:212:20",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5019,
                                  "name": "proofPos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4953,
                                  "src": "24021:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "id": 5020,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4889,
                                    "src": "24033:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  },
                                  "id": 5021,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "24039:6:20",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "24033:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "24021:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 5027,
                              "nodeType": "IfStatement",
                              "src": "24017:100:20",
                              "trueBody": {
                                "id": 5026,
                                "nodeType": "Block",
                                "src": "24047:70:20",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 5023,
                                        "name": "MerkleProofInvalidMultiproof",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3988,
                                        "src": "24072:28:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 5024,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "24072:30:20",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 5025,
                                    "nodeType": "RevertStatement",
                                    "src": "24065:37:20"
                                  }
                                ]
                              }
                            },
                            {
                              "id": 5034,
                              "nodeType": "UncheckedBlock",
                              "src": "24130:75:20",
                              "statements": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 5028,
                                      "name": "hashes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4937,
                                      "src": "24165:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                        "typeString": "bytes32[] memory"
                                      }
                                    },
                                    "id": 5032,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 5031,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 5029,
                                        "name": "proofFlagsLen",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4916,
                                        "src": "24172:13:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 5030,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "24188:1:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "24172:17:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24165:25:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "functionReturnParameters": 4909,
                                  "id": 5033,
                                  "nodeType": "Return",
                                  "src": "24158:32:20"
                                }
                              ]
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4886,
                    "nodeType": "StructuredDocumentation",
                    "src": "20893:1099:20",
                    "text": " @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction\n proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another\n leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false\n respectively.\n This version handles multiproofs in calldata with a custom hashing function.\n CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree\n is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the\n tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).\n NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,\n and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not\n validating the leaves elsewhere."
                  },
                  "id": 5052,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "processMultiProofCalldata",
                  "nameLocation": "22006:25:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4906,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4889,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "22060:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 5052,
                        "src": "22041:24:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4887,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "22041:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4888,
                          "nodeType": "ArrayTypeName",
                          "src": "22041:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4892,
                        "mutability": "mutable",
                        "name": "proofFlags",
                        "nameLocation": "22091:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 5052,
                        "src": "22075:26:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                          "typeString": "bool[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4890,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "22075:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4891,
                          "nodeType": "ArrayTypeName",
                          "src": "22075:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                            "typeString": "bool[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4895,
                        "mutability": "mutable",
                        "name": "leaves",
                        "nameLocation": "22128:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 5052,
                        "src": "22111:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4893,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "22111:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4894,
                          "nodeType": "ArrayTypeName",
                          "src": "22111:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4905,
                        "mutability": "mutable",
                        "name": "hasher",
                        "nameLocation": "22194:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 5052,
                        "src": "22144:56:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                        },
                        "typeName": {
                          "id": 4904,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4900,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4897,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4904,
                                "src": "22153:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4896,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "22153:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4899,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4904,
                                "src": "22162:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4898,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "22162:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "22152:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4903,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4902,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4904,
                                "src": "22185:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4901,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "22185:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "22184:9:20"
                          },
                          "src": "22144:56:20",
                          "stateMutability": "view",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32) view returns (bytes32)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22031:175:20"
                  },
                  "returnParameters": {
                    "id": 4909,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4908,
                        "mutability": "mutable",
                        "name": "merkleRoot",
                        "nameLocation": "22238:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 5052,
                        "src": "22230:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4907,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "22230:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22229:20:20"
                  },
                  "scope": 5053,
                  "src": "21997:2336:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5054,
              "src": "1353:22982:20",
              "usedErrors": [
                3988
              ],
              "usedEvents": []
            }
          ],
          "src": "206:24130:20"
        },
        "id": 20
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
          "exportedSymbols": {
            "ERC165": [
              5077
            ],
            "IERC165": [
              5089
            ]
          },
          "id": 5078,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5055,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "114:24:21"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "./IERC165.sol",
              "id": 5057,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5078,
              "sourceUnit": 5090,
              "src": "140:38:21",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 5056,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5089,
                    "src": "148:7:21",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5059,
                    "name": "IERC165",
                    "nameLocations": [
                      "688:7:21"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5089,
                    "src": "688:7:21"
                  },
                  "id": 5060,
                  "nodeType": "InheritanceSpecifier",
                  "src": "688:7:21"
                }
              ],
              "canonicalName": "ERC165",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 5058,
                "nodeType": "StructuredDocumentation",
                "src": "180:479:21",
                "text": " @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```"
              },
              "fullyImplemented": true,
              "id": 5077,
              "linearizedBaseContracts": [
                5077,
                5089
              ],
              "name": "ERC165",
              "nameLocation": "678:6:21",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    5088
                  ],
                  "body": {
                    "id": 5075,
                    "nodeType": "Block",
                    "src": "845:64:21",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 5073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5068,
                            "name": "interfaceId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5063,
                            "src": "862:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5070,
                                  "name": "IERC165",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5089,
                                  "src": "882:7:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$5089_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$5089_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                ],
                                "id": 5069,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "877:4:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 5071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "877:13:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$5089",
                                "typeString": "type(contract IERC165)"
                              }
                            },
                            "id": 5072,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "891:11:21",
                            "memberName": "interfaceId",
                            "nodeType": "MemberAccess",
                            "src": "877:25:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "862:40:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 5067,
                        "id": 5074,
                        "nodeType": "Return",
                        "src": "855:47:21"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5061,
                    "nodeType": "StructuredDocumentation",
                    "src": "702:56:21",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 5076,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "772:17:21",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5064,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5063,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "797:11:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 5076,
                        "src": "790:18:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 5062,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "790:6:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "789:20:21"
                  },
                  "returnParameters": {
                    "id": 5067,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5066,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5076,
                        "src": "839:4:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5065,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "839:4:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "838:6:21"
                  },
                  "scope": 5077,
                  "src": "763:146:21",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 5078,
              "src": "660:251:21",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "114:798:21"
        },
        "id": 21
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
          "exportedSymbols": {
            "IERC165": [
              5089
            ]
          },
          "id": 5090,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5079,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "115:24:22"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC165",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 5080,
                "nodeType": "StructuredDocumentation",
                "src": "141:280:22",
                "text": " @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
              },
              "fullyImplemented": false,
              "id": 5089,
              "linearizedBaseContracts": [
                5089
              ],
              "name": "IERC165",
              "nameLocation": "432:7:22",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 5081,
                    "nodeType": "StructuredDocumentation",
                    "src": "446:340:22",
                    "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 5088,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "800:17:22",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5084,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5083,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "825:11:22",
                        "nodeType": "VariableDeclaration",
                        "scope": 5088,
                        "src": "818:18:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 5082,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "818:6:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "817:20:22"
                  },
                  "returnParameters": {
                    "id": 5087,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5086,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5088,
                        "src": "861:4:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5085,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "861:4:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "860:6:22"
                  },
                  "scope": 5089,
                  "src": "791:76:22",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5090,
              "src": "422:447:22",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "115:755:22"
        },
        "id": 22
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
          "exportedSymbols": {
            "Math": [
              6710
            ],
            "Panic": [
              2361
            ],
            "SafeCast": [
              8475
            ]
          },
          "id": 6711,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5091,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "103:24:23"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Panic.sol",
              "file": "../Panic.sol",
              "id": 5093,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6711,
              "sourceUnit": 2362,
              "src": "129:35:23",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 5092,
                    "name": "Panic",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2361,
                    "src": "137:5:23",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
              "file": "./SafeCast.sol",
              "id": 5095,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6711,
              "sourceUnit": 8476,
              "src": "165:40:23",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 5094,
                    "name": "SafeCast",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8475,
                    "src": "173:8:23",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Math",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 5096,
                "nodeType": "StructuredDocumentation",
                "src": "207:73:23",
                "text": " @dev Standard math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 6710,
              "linearizedBaseContracts": [
                6710
              ],
              "name": "Math",
              "nameLocation": "289:4:23",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "Math.Rounding",
                  "id": 5101,
                  "members": [
                    {
                      "id": 5097,
                      "name": "Floor",
                      "nameLocation": "324:5:23",
                      "nodeType": "EnumValue",
                      "src": "324:5:23"
                    },
                    {
                      "id": 5098,
                      "name": "Ceil",
                      "nameLocation": "367:4:23",
                      "nodeType": "EnumValue",
                      "src": "367:4:23"
                    },
                    {
                      "id": 5099,
                      "name": "Trunc",
                      "nameLocation": "409:5:23",
                      "nodeType": "EnumValue",
                      "src": "409:5:23"
                    },
                    {
                      "id": 5100,
                      "name": "Expand",
                      "nameLocation": "439:6:23",
                      "nodeType": "EnumValue",
                      "src": "439:6:23"
                    }
                  ],
                  "name": "Rounding",
                  "nameLocation": "305:8:23",
                  "nodeType": "EnumDefinition",
                  "src": "300:169:23"
                },
                {
                  "body": {
                    "id": 5114,
                    "nodeType": "Block",
                    "src": "731:112:23",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "766:71:23",
                          "nodeType": "YulBlock",
                          "src": "766:71:23",
                          "statements": [
                            {
                              "nativeSrc": "780:16:23",
                              "nodeType": "YulAssignment",
                              "src": "780:16:23",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nativeSrc": "791:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "791:1:23"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "794:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "794:1:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "787:3:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "787:3:23"
                                },
                                "nativeSrc": "787:9:23",
                                "nodeType": "YulFunctionCall",
                                "src": "787:9:23"
                              },
                              "variableNames": [
                                {
                                  "name": "low",
                                  "nativeSrc": "780:3:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "780:3:23"
                                }
                              ]
                            },
                            {
                              "nativeSrc": "809:18:23",
                              "nodeType": "YulAssignment",
                              "src": "809:18:23",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "low",
                                    "nativeSrc": "820:3:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "820:3:23"
                                  },
                                  {
                                    "name": "a",
                                    "nativeSrc": "825:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "825:1:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nativeSrc": "817:2:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "817:2:23"
                                },
                                "nativeSrc": "817:10:23",
                                "nodeType": "YulFunctionCall",
                                "src": "817:10:23"
                              },
                              "variableNames": [
                                {
                                  "name": "high",
                                  "nativeSrc": "809:4:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "809:4:23"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 5104,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "791:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5104,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "825:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5106,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "794:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5109,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "809:4:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5111,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "780:3:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5111,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "820:3:23",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 5113,
                        "nodeType": "InlineAssembly",
                        "src": "741:96:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5102,
                    "nodeType": "StructuredDocumentation",
                    "src": "475:163:23",
                    "text": " @dev Return the 512-bit addition of two uint256.\n The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low."
                  },
                  "id": 5115,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add512",
                  "nameLocation": "652:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5107,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5104,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "667:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5115,
                        "src": "659:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5103,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "659:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5106,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "678:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5115,
                        "src": "670:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5105,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "670:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "658:22:23"
                  },
                  "returnParameters": {
                    "id": 5112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5109,
                        "mutability": "mutable",
                        "name": "high",
                        "nameLocation": "712:4:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5115,
                        "src": "704:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5108,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "704:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5111,
                        "mutability": "mutable",
                        "name": "low",
                        "nameLocation": "726:3:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5115,
                        "src": "718:11:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5110,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "718:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "703:27:23"
                  },
                  "scope": 6710,
                  "src": "643:200:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5128,
                    "nodeType": "Block",
                    "src": "1115:462:23",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1437:134:23",
                          "nodeType": "YulBlock",
                          "src": "1437:134:23",
                          "statements": [
                            {
                              "nativeSrc": "1451:30:23",
                              "nodeType": "YulVariableDeclaration",
                              "src": "1451:30:23",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nativeSrc": "1468:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "1468:1:23"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "1471:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "1471:1:23"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1478:1:23",
                                        "nodeType": "YulLiteral",
                                        "src": "1478:1:23",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nativeSrc": "1474:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "1474:3:23"
                                    },
                                    "nativeSrc": "1474:6:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1474:6:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mulmod",
                                  "nativeSrc": "1461:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1461:6:23"
                                },
                                "nativeSrc": "1461:20:23",
                                "nodeType": "YulFunctionCall",
                                "src": "1461:20:23"
                              },
                              "variables": [
                                {
                                  "name": "mm",
                                  "nativeSrc": "1455:2:23",
                                  "nodeType": "YulTypedName",
                                  "src": "1455:2:23",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "1494:16:23",
                              "nodeType": "YulAssignment",
                              "src": "1494:16:23",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nativeSrc": "1505:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "1505:1:23"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "1508:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "1508:1:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nativeSrc": "1501:3:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1501:3:23"
                                },
                                "nativeSrc": "1501:9:23",
                                "nodeType": "YulFunctionCall",
                                "src": "1501:9:23"
                              },
                              "variableNames": [
                                {
                                  "name": "low",
                                  "nativeSrc": "1494:3:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1494:3:23"
                                }
                              ]
                            },
                            {
                              "nativeSrc": "1523:38:23",
                              "nodeType": "YulAssignment",
                              "src": "1523:38:23",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "mm",
                                        "nativeSrc": "1539:2:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "1539:2:23"
                                      },
                                      {
                                        "name": "low",
                                        "nativeSrc": "1543:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "1543:3:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nativeSrc": "1535:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "1535:3:23"
                                    },
                                    "nativeSrc": "1535:12:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1535:12:23"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "mm",
                                        "nativeSrc": "1552:2:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "1552:2:23"
                                      },
                                      {
                                        "name": "low",
                                        "nativeSrc": "1556:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "1556:3:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nativeSrc": "1549:2:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "1549:2:23"
                                    },
                                    "nativeSrc": "1549:11:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1549:11:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "1531:3:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1531:3:23"
                                },
                                "nativeSrc": "1531:30:23",
                                "nodeType": "YulFunctionCall",
                                "src": "1531:30:23"
                              },
                              "variableNames": [
                                {
                                  "name": "high",
                                  "nativeSrc": "1523:4:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1523:4:23"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 5118,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1468:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5118,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1505:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5120,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1471:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5120,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1508:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5123,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1523:4:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5125,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1494:3:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5125,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1543:3:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5125,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1556:3:23",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 5127,
                        "nodeType": "InlineAssembly",
                        "src": "1412:159:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5116,
                    "nodeType": "StructuredDocumentation",
                    "src": "849:173:23",
                    "text": " @dev Return the 512-bit multiplication of two uint256.\n The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low."
                  },
                  "id": 5129,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul512",
                  "nameLocation": "1036:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5118,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1051:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5129,
                        "src": "1043:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5117,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1043:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5120,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1062:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5129,
                        "src": "1054:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5119,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1054:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1042:22:23"
                  },
                  "returnParameters": {
                    "id": 5126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5123,
                        "mutability": "mutable",
                        "name": "high",
                        "nameLocation": "1096:4:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5129,
                        "src": "1088:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5122,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1088:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5125,
                        "mutability": "mutable",
                        "name": "low",
                        "nameLocation": "1110:3:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5129,
                        "src": "1102:11:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5124,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1102:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1087:27:23"
                  },
                  "scope": 6710,
                  "src": "1027:550:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5163,
                    "nodeType": "Block",
                    "src": "1784:149:23",
                    "statements": [
                      {
                        "id": 5162,
                        "nodeType": "UncheckedBlock",
                        "src": "1794:133:23",
                        "statements": [
                          {
                            "assignments": [
                              5142
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5142,
                                "mutability": "mutable",
                                "name": "c",
                                "nameLocation": "1826:1:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5162,
                                "src": "1818:9:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5141,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1818:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5146,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5145,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5143,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5132,
                                "src": "1830:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 5144,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5134,
                                "src": "1834:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1830:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1818:17:23"
                          },
                          {
                            "expression": {
                              "id": 5151,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5147,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5137,
                                "src": "1849:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5148,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5142,
                                  "src": "1859:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 5149,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5132,
                                  "src": "1864:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1859:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1849:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5152,
                            "nodeType": "ExpressionStatement",
                            "src": "1849:16:23"
                          },
                          {
                            "expression": {
                              "id": 5160,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5153,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5139,
                                "src": "1879:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5159,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5154,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5142,
                                  "src": "1888:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 5157,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5137,
                                      "src": "1908:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "expression": {
                                      "id": 5155,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8475,
                                      "src": "1892:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 5156,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "1901:6:23",
                                    "memberName": "toUint",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8474,
                                    "src": "1892:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                      "typeString": "function (bool) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5158,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1892:24:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1888:28:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1879:37:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5161,
                            "nodeType": "ExpressionStatement",
                            "src": "1879:37:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5130,
                    "nodeType": "StructuredDocumentation",
                    "src": "1583:105:23",
                    "text": " @dev Returns the addition of two unsigned integers, with a success flag (no overflow)."
                  },
                  "id": 5164,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryAdd",
                  "nameLocation": "1702:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5132,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1717:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5164,
                        "src": "1709:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5131,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1709:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5134,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1728:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5164,
                        "src": "1720:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1720:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1708:22:23"
                  },
                  "returnParameters": {
                    "id": 5140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5137,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "1759:7:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5164,
                        "src": "1754:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5136,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1754:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5139,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "1776:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5164,
                        "src": "1768:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5138,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1768:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1753:30:23"
                  },
                  "scope": 6710,
                  "src": "1693:240:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5198,
                    "nodeType": "Block",
                    "src": "2143:149:23",
                    "statements": [
                      {
                        "id": 5197,
                        "nodeType": "UncheckedBlock",
                        "src": "2153:133:23",
                        "statements": [
                          {
                            "assignments": [
                              5177
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5177,
                                "mutability": "mutable",
                                "name": "c",
                                "nameLocation": "2185:1:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5197,
                                "src": "2177:9:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5176,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2177:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5181,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5178,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5167,
                                "src": "2189:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 5179,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5169,
                                "src": "2193:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2189:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2177:17:23"
                          },
                          {
                            "expression": {
                              "id": 5186,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5182,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5172,
                                "src": "2208:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5185,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5183,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5177,
                                  "src": "2218:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "id": 5184,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5167,
                                  "src": "2223:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2218:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2208:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5187,
                            "nodeType": "ExpressionStatement",
                            "src": "2208:16:23"
                          },
                          {
                            "expression": {
                              "id": 5195,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5188,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5174,
                                "src": "2238:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5194,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5189,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5177,
                                  "src": "2247:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 5192,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5172,
                                      "src": "2267:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "expression": {
                                      "id": 5190,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8475,
                                      "src": "2251:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 5191,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "2260:6:23",
                                    "memberName": "toUint",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8474,
                                    "src": "2251:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                      "typeString": "function (bool) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5193,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2251:24:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2247:28:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2238:37:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5196,
                            "nodeType": "ExpressionStatement",
                            "src": "2238:37:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5165,
                    "nodeType": "StructuredDocumentation",
                    "src": "1939:108:23",
                    "text": " @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow)."
                  },
                  "id": 5199,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "trySub",
                  "nameLocation": "2061:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5170,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5167,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "2076:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5199,
                        "src": "2068:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2068:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5169,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "2087:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5199,
                        "src": "2079:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5168,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2079:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2067:22:23"
                  },
                  "returnParameters": {
                    "id": 5175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5172,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "2118:7:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5199,
                        "src": "2113:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5171,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2113:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5174,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "2135:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5199,
                        "src": "2127:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5173,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2127:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2112:30:23"
                  },
                  "scope": 6710,
                  "src": "2052:240:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5228,
                    "nodeType": "Block",
                    "src": "2505:391:23",
                    "statements": [
                      {
                        "id": 5227,
                        "nodeType": "UncheckedBlock",
                        "src": "2515:375:23",
                        "statements": [
                          {
                            "assignments": [
                              5212
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5212,
                                "mutability": "mutable",
                                "name": "c",
                                "nameLocation": "2547:1:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5227,
                                "src": "2539:9:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5211,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2539:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5216,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5213,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5202,
                                "src": "2551:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 5214,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5204,
                                "src": "2555:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2551:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2539:17:23"
                          },
                          {
                            "AST": {
                              "nativeSrc": "2595:188:23",
                              "nodeType": "YulBlock",
                              "src": "2595:188:23",
                              "statements": [
                                {
                                  "nativeSrc": "2727:42:23",
                                  "nodeType": "YulAssignment",
                                  "src": "2727:42:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "c",
                                                "nativeSrc": "2748:1:23",
                                                "nodeType": "YulIdentifier",
                                                "src": "2748:1:23"
                                              },
                                              {
                                                "name": "a",
                                                "nativeSrc": "2751:1:23",
                                                "nodeType": "YulIdentifier",
                                                "src": "2751:1:23"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "div",
                                              "nativeSrc": "2744:3:23",
                                              "nodeType": "YulIdentifier",
                                              "src": "2744:3:23"
                                            },
                                            "nativeSrc": "2744:9:23",
                                            "nodeType": "YulFunctionCall",
                                            "src": "2744:9:23"
                                          },
                                          {
                                            "name": "b",
                                            "nativeSrc": "2755:1:23",
                                            "nodeType": "YulIdentifier",
                                            "src": "2755:1:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "eq",
                                          "nativeSrc": "2741:2:23",
                                          "nodeType": "YulIdentifier",
                                          "src": "2741:2:23"
                                        },
                                        "nativeSrc": "2741:16:23",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2741:16:23"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "a",
                                            "nativeSrc": "2766:1:23",
                                            "nodeType": "YulIdentifier",
                                            "src": "2766:1:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nativeSrc": "2759:6:23",
                                          "nodeType": "YulIdentifier",
                                          "src": "2759:6:23"
                                        },
                                        "nativeSrc": "2759:9:23",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2759:9:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nativeSrc": "2738:2:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "2738:2:23"
                                    },
                                    "nativeSrc": "2738:31:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2738:31:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "success",
                                      "nativeSrc": "2727:7:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "2727:7:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 5202,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2751:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5202,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2766:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5204,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2755:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5212,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2748:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5207,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2727:7:23",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 5217,
                            "nodeType": "InlineAssembly",
                            "src": "2570:213:23"
                          },
                          {
                            "expression": {
                              "id": 5225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5218,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5209,
                                "src": "2842:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5219,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5212,
                                  "src": "2851:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 5222,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5207,
                                      "src": "2871:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "expression": {
                                      "id": 5220,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8475,
                                      "src": "2855:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 5221,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "2864:6:23",
                                    "memberName": "toUint",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8474,
                                    "src": "2855:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                      "typeString": "function (bool) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5223,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2855:24:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2851:28:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2842:37:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5226,
                            "nodeType": "ExpressionStatement",
                            "src": "2842:37:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5200,
                    "nodeType": "StructuredDocumentation",
                    "src": "2298:111:23",
                    "text": " @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow)."
                  },
                  "id": 5229,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryMul",
                  "nameLocation": "2423:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5205,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5202,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "2438:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5229,
                        "src": "2430:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5201,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2430:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5204,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "2449:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5229,
                        "src": "2441:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5203,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2441:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2429:22:23"
                  },
                  "returnParameters": {
                    "id": 5210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5207,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "2480:7:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5229,
                        "src": "2475:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5206,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2475:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5209,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "2497:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5229,
                        "src": "2489:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2489:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2474:30:23"
                  },
                  "scope": 6710,
                  "src": "2414:482:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5249,
                    "nodeType": "Block",
                    "src": "3111:231:23",
                    "statements": [
                      {
                        "id": 5248,
                        "nodeType": "UncheckedBlock",
                        "src": "3121:215:23",
                        "statements": [
                          {
                            "expression": {
                              "id": 5245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5241,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5237,
                                "src": "3145:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5244,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5242,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5234,
                                  "src": "3155:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 5243,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3159:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3155:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3145:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5246,
                            "nodeType": "ExpressionStatement",
                            "src": "3145:15:23"
                          },
                          {
                            "AST": {
                              "nativeSrc": "3199:127:23",
                              "nodeType": "YulBlock",
                              "src": "3199:127:23",
                              "statements": [
                                {
                                  "nativeSrc": "3293:19:23",
                                  "nodeType": "YulAssignment",
                                  "src": "3293:19:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "a",
                                        "nativeSrc": "3307:1:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "3307:1:23"
                                      },
                                      {
                                        "name": "b",
                                        "nativeSrc": "3310:1:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "3310:1:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nativeSrc": "3303:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "3303:3:23"
                                    },
                                    "nativeSrc": "3303:9:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "3303:9:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "result",
                                      "nativeSrc": "3293:6:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "3293:6:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 5232,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3307:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5234,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3310:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5239,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3293:6:23",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 5247,
                            "nodeType": "InlineAssembly",
                            "src": "3174:152:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5230,
                    "nodeType": "StructuredDocumentation",
                    "src": "2902:113:23",
                    "text": " @dev Returns the division of two unsigned integers, with a success flag (no division by zero)."
                  },
                  "id": 5250,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryDiv",
                  "nameLocation": "3029:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5232,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "3044:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5250,
                        "src": "3036:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5231,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3036:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5234,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "3055:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5250,
                        "src": "3047:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5233,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3047:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3035:22:23"
                  },
                  "returnParameters": {
                    "id": 5240,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5237,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "3086:7:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5250,
                        "src": "3081:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5236,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3081:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5239,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3103:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5250,
                        "src": "3095:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5238,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3095:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3080:30:23"
                  },
                  "scope": 6710,
                  "src": "3020:322:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5270,
                    "nodeType": "Block",
                    "src": "3567:231:23",
                    "statements": [
                      {
                        "id": 5269,
                        "nodeType": "UncheckedBlock",
                        "src": "3577:215:23",
                        "statements": [
                          {
                            "expression": {
                              "id": 5266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5262,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5258,
                                "src": "3601:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5263,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5255,
                                  "src": "3611:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 5264,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3615:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3611:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3601:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5267,
                            "nodeType": "ExpressionStatement",
                            "src": "3601:15:23"
                          },
                          {
                            "AST": {
                              "nativeSrc": "3655:127:23",
                              "nodeType": "YulBlock",
                              "src": "3655:127:23",
                              "statements": [
                                {
                                  "nativeSrc": "3749:19:23",
                                  "nodeType": "YulAssignment",
                                  "src": "3749:19:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "a",
                                        "nativeSrc": "3763:1:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "3763:1:23"
                                      },
                                      {
                                        "name": "b",
                                        "nativeSrc": "3766:1:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "3766:1:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mod",
                                      "nativeSrc": "3759:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "3759:3:23"
                                    },
                                    "nativeSrc": "3759:9:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "3759:9:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "result",
                                      "nativeSrc": "3749:6:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "3749:6:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 5253,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3763:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5255,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3766:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5260,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3749:6:23",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 5268,
                            "nodeType": "InlineAssembly",
                            "src": "3630:152:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5251,
                    "nodeType": "StructuredDocumentation",
                    "src": "3348:123:23",
                    "text": " @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero)."
                  },
                  "id": 5271,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryMod",
                  "nameLocation": "3485:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5253,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "3500:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5271,
                        "src": "3492:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5252,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3492:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5255,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "3511:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5271,
                        "src": "3503:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3503:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3491:22:23"
                  },
                  "returnParameters": {
                    "id": 5261,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5258,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "3542:7:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5271,
                        "src": "3537:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5257,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3537:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5260,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3559:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5271,
                        "src": "3551:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5259,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3551:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3536:30:23"
                  },
                  "scope": 6710,
                  "src": "3476:322:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5300,
                    "nodeType": "Block",
                    "src": "3989:122:23",
                    "statements": [
                      {
                        "assignments": [
                          5282,
                          5284
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5282,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "4005:7:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5300,
                            "src": "4000:12:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5281,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4000:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5284,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "4022:6:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5300,
                            "src": "4014:14:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5283,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4014:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5289,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5286,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5274,
                              "src": "4039:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5287,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5276,
                              "src": "4042:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5285,
                            "name": "tryAdd",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5164,
                            "src": "4032:6:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4032:12:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3999:45:23"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5291,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5282,
                              "src": "4069:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 5292,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5284,
                              "src": "4078:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5295,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4091:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 5294,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4091:7:23",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 5293,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "4086:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 5296,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4086:13:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 5297,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "4100:3:23",
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "4086:17:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5290,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5378,
                            "src": "4061:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4061:43:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5280,
                        "id": 5299,
                        "nodeType": "Return",
                        "src": "4054:50:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5272,
                    "nodeType": "StructuredDocumentation",
                    "src": "3804:103:23",
                    "text": " @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing."
                  },
                  "id": 5301,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "saturatingAdd",
                  "nameLocation": "3921:13:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5274,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "3943:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5301,
                        "src": "3935:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5273,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3935:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5276,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "3954:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5301,
                        "src": "3946:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5275,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3946:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3934:22:23"
                  },
                  "returnParameters": {
                    "id": 5280,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5279,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5301,
                        "src": "3980:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5278,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3980:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3979:9:23"
                  },
                  "scope": 6710,
                  "src": "3912:199:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5320,
                    "nodeType": "Block",
                    "src": "4294:73:23",
                    "statements": [
                      {
                        "assignments": [
                          null,
                          5312
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 5312,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "4315:6:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5320,
                            "src": "4307:14:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5311,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4307:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5317,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5314,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5304,
                              "src": "4332:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5315,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5306,
                              "src": "4335:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5313,
                            "name": "trySub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5199,
                            "src": "4325:6:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4325:12:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4304:33:23"
                      },
                      {
                        "expression": {
                          "id": 5318,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5312,
                          "src": "4354:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5310,
                        "id": 5319,
                        "nodeType": "Return",
                        "src": "4347:13:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5302,
                    "nodeType": "StructuredDocumentation",
                    "src": "4117:95:23",
                    "text": " @dev Unsigned saturating subtraction, bounds to zero instead of overflowing."
                  },
                  "id": 5321,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "saturatingSub",
                  "nameLocation": "4226:13:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5304,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "4248:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5321,
                        "src": "4240:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5303,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4240:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5306,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "4259:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5321,
                        "src": "4251:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4251:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4239:22:23"
                  },
                  "returnParameters": {
                    "id": 5310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5309,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5321,
                        "src": "4285:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5308,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4285:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4284:9:23"
                  },
                  "scope": 6710,
                  "src": "4217:150:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5350,
                    "nodeType": "Block",
                    "src": "4564:122:23",
                    "statements": [
                      {
                        "assignments": [
                          5332,
                          5334
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5332,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "4580:7:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5350,
                            "src": "4575:12:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5331,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4575:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5334,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "4597:6:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5350,
                            "src": "4589:14:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5333,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4589:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5339,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5336,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5324,
                              "src": "4614:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5337,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5326,
                              "src": "4617:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5335,
                            "name": "tryMul",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5229,
                            "src": "4607:6:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4607:12:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4574:45:23"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5341,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5332,
                              "src": "4644:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 5342,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5334,
                              "src": "4653:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5345,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4666:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 5344,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4666:7:23",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 5343,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "4661:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 5346,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4661:13:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 5347,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "4675:3:23",
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "4661:17:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5340,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5378,
                            "src": "4636:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4636:43:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5330,
                        "id": 5349,
                        "nodeType": "Return",
                        "src": "4629:50:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5322,
                    "nodeType": "StructuredDocumentation",
                    "src": "4373:109:23",
                    "text": " @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing."
                  },
                  "id": 5351,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "saturatingMul",
                  "nameLocation": "4496:13:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5327,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5324,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "4518:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5351,
                        "src": "4510:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5323,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4510:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5326,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "4529:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5351,
                        "src": "4521:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5325,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4521:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4509:22:23"
                  },
                  "returnParameters": {
                    "id": 5330,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5329,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5351,
                        "src": "4555:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5328,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4555:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4554:9:23"
                  },
                  "scope": 6710,
                  "src": "4487:199:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5377,
                    "nodeType": "Block",
                    "src": "5158:207:23",
                    "statements": [
                      {
                        "id": 5376,
                        "nodeType": "UncheckedBlock",
                        "src": "5168:191:23",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5363,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5358,
                                "src": "5306:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5372,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5366,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5364,
                                            "name": "a",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5356,
                                            "src": "5312:1:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "^",
                                          "rightExpression": {
                                            "id": 5365,
                                            "name": "b",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5358,
                                            "src": "5316:1:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "5312:5:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 5367,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "5311:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "id": 5370,
                                          "name": "condition",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5354,
                                          "src": "5337:9:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        ],
                                        "expression": {
                                          "id": 5368,
                                          "name": "SafeCast",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8475,
                                          "src": "5321:8:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                            "typeString": "type(library SafeCast)"
                                          }
                                        },
                                        "id": 5369,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "5330:6:23",
                                        "memberName": "toUint",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8474,
                                        "src": "5321:15:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                          "typeString": "function (bool) pure returns (uint256)"
                                        }
                                      },
                                      "id": 5371,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5321:26:23",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5311:36:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5373,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5310:38:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5306:42:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 5362,
                            "id": 5375,
                            "nodeType": "Return",
                            "src": "5299:49:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5352,
                    "nodeType": "StructuredDocumentation",
                    "src": "4692:374:23",
                    "text": " @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."
                  },
                  "id": 5378,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ternary",
                  "nameLocation": "5080:7:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5359,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5354,
                        "mutability": "mutable",
                        "name": "condition",
                        "nameLocation": "5093:9:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5378,
                        "src": "5088:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5353,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5088:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5356,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5112:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5378,
                        "src": "5104:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5355,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5104:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5358,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5123:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5378,
                        "src": "5115:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5357,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5115:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5087:38:23"
                  },
                  "returnParameters": {
                    "id": 5362,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5361,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5378,
                        "src": "5149:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5360,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5149:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5148:9:23"
                  },
                  "scope": 6710,
                  "src": "5071:294:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5396,
                    "nodeType": "Block",
                    "src": "5502:44:23",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5389,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5381,
                                "src": "5527:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 5390,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5383,
                                "src": "5531:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5527:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 5392,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5381,
                              "src": "5534:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5393,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5383,
                              "src": "5537:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5388,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5378,
                            "src": "5519:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5519:20:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5387,
                        "id": 5395,
                        "nodeType": "Return",
                        "src": "5512:27:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5379,
                    "nodeType": "StructuredDocumentation",
                    "src": "5371:59:23",
                    "text": " @dev Returns the largest of two numbers."
                  },
                  "id": 5397,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "5444:3:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5384,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5381,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5456:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5397,
                        "src": "5448:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5380,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5448:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5383,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5467:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5397,
                        "src": "5459:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5382,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5459:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5447:22:23"
                  },
                  "returnParameters": {
                    "id": 5387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5386,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5397,
                        "src": "5493:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5385,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5493:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5492:9:23"
                  },
                  "scope": 6710,
                  "src": "5435:111:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5415,
                    "nodeType": "Block",
                    "src": "5684:44:23",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5408,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5400,
                                "src": "5709:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 5409,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "5713:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5709:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 5411,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5400,
                              "src": "5716:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5412,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5402,
                              "src": "5719:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5407,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5378,
                            "src": "5701:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5701:20:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5406,
                        "id": 5414,
                        "nodeType": "Return",
                        "src": "5694:27:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5398,
                    "nodeType": "StructuredDocumentation",
                    "src": "5552:60:23",
                    "text": " @dev Returns the smallest of two numbers."
                  },
                  "id": 5416,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "5626:3:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5403,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5400,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5638:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5416,
                        "src": "5630:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5399,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5630:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5402,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5649:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5416,
                        "src": "5641:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5401,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5641:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5629:22:23"
                  },
                  "returnParameters": {
                    "id": 5406,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5405,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5416,
                        "src": "5675:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5404,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5675:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5674:9:23"
                  },
                  "scope": 6710,
                  "src": "5617:111:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5438,
                    "nodeType": "Block",
                    "src": "5912:82:23",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5428,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5426,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5419,
                                  "src": "5967:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 5427,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5421,
                                  "src": "5971:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5967:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 5429,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "5966:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5432,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5430,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5419,
                                    "src": "5977:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "id": 5431,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5421,
                                    "src": "5981:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5977:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 5433,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5976:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 5434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5986:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "5976:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5966:21:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5425,
                        "id": 5437,
                        "nodeType": "Return",
                        "src": "5959:28:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5417,
                    "nodeType": "StructuredDocumentation",
                    "src": "5734:102:23",
                    "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero."
                  },
                  "id": 5439,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "5850:7:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5422,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5419,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5866:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5439,
                        "src": "5858:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5858:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5421,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5877:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5439,
                        "src": "5869:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5420,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5869:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5857:22:23"
                  },
                  "returnParameters": {
                    "id": 5425,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5424,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5439,
                        "src": "5903:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5423,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5903:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5902:9:23"
                  },
                  "scope": 6710,
                  "src": "5841:153:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5479,
                    "nodeType": "Block",
                    "src": "6286:633:23",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5449,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5444,
                            "src": "6300:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5450,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6305:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6300:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5460,
                        "nodeType": "IfStatement",
                        "src": "6296:150:23",
                        "trueBody": {
                          "id": 5459,
                          "nodeType": "Block",
                          "src": "6308:138:23",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 5455,
                                      "name": "Panic",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2361,
                                      "src": "6412:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                        "typeString": "type(library Panic)"
                                      }
                                    },
                                    "id": 5456,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "6418:16:23",
                                    "memberName": "DIVISION_BY_ZERO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2328,
                                    "src": "6412:22:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5452,
                                    "name": "Panic",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2361,
                                    "src": "6400:5:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                      "typeString": "type(library Panic)"
                                    }
                                  },
                                  "id": 5454,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6406:5:23",
                                  "memberName": "panic",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2360,
                                  "src": "6400:11:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 5457,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6400:35:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 5458,
                              "nodeType": "ExpressionStatement",
                              "src": "6400:35:23"
                            }
                          ]
                        }
                      },
                      {
                        "id": 5478,
                        "nodeType": "UncheckedBlock",
                        "src": "6829:84:23",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5465,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5463,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5442,
                                      "src": "6876:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 5464,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6880:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "6876:5:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5461,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8475,
                                    "src": "6860:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 5462,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6869:6:23",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8474,
                                  "src": "6860:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 5466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6860:22:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5474,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 5472,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 5469,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 5467,
                                              "name": "a",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5442,
                                              "src": "6887:1:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 5468,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "6891:1:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "6887:5:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 5470,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "6886:7:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "/",
                                      "rightExpression": {
                                        "id": 5471,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5444,
                                        "src": "6896:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6886:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 5473,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6900:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "6886:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5475,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6885:17:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6860:42:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 5448,
                            "id": 5477,
                            "nodeType": "Return",
                            "src": "6853:49:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5440,
                    "nodeType": "StructuredDocumentation",
                    "src": "6000:210:23",
                    "text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."
                  },
                  "id": 5480,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ceilDiv",
                  "nameLocation": "6224:7:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5445,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5442,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "6240:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5480,
                        "src": "6232:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5441,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6232:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5444,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "6251:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5480,
                        "src": "6243:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5443,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6243:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6231:22:23"
                  },
                  "returnParameters": {
                    "id": 5448,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5447,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5480,
                        "src": "6277:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5446,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6277:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6276:9:23"
                  },
                  "scope": 6710,
                  "src": "6215:704:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5615,
                    "nodeType": "Block",
                    "src": "7340:3585:23",
                    "statements": [
                      {
                        "id": 5614,
                        "nodeType": "UncheckedBlock",
                        "src": "7350:3569:23",
                        "statements": [
                          {
                            "assignments": [
                              5493,
                              5495
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5493,
                                "mutability": "mutable",
                                "name": "high",
                                "nameLocation": "7383:4:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5614,
                                "src": "7375:12:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5492,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7375:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 5495,
                                "mutability": "mutable",
                                "name": "low",
                                "nameLocation": "7397:3:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5614,
                                "src": "7389:11:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5494,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7389:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5500,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 5497,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5483,
                                  "src": "7411:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 5498,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5485,
                                  "src": "7414:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 5496,
                                "name": "mul512",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5129,
                                "src": "7404:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256,uint256)"
                                }
                              },
                              "id": 5499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7404:12:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "7374:42:23"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5501,
                                "name": "high",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5493,
                                "src": "7498:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5502,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7506:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7498:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5509,
                            "nodeType": "IfStatement",
                            "src": "7494:365:23",
                            "trueBody": {
                              "id": 5508,
                              "nodeType": "Block",
                              "src": "7509:350:23",
                              "statements": [
                                {
                                  "expression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5506,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5504,
                                      "name": "low",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5495,
                                      "src": "7827:3:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "id": 5505,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5487,
                                      "src": "7833:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "7827:17:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 5491,
                                  "id": 5507,
                                  "nodeType": "Return",
                                  "src": "7820:24:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5510,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5487,
                                "src": "7969:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 5511,
                                "name": "high",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5493,
                                "src": "7984:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7969:19:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5528,
                            "nodeType": "IfStatement",
                            "src": "7965:142:23",
                            "trueBody": {
                              "id": 5527,
                              "nodeType": "Block",
                              "src": "7990:117:23",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 5519,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 5517,
                                              "name": "denominator",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5487,
                                              "src": "8028:11:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                              "hexValue": "30",
                                              "id": 5518,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "8043:1:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                              },
                                              "value": "0"
                                            },
                                            "src": "8028:16:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          {
                                            "expression": {
                                              "id": 5520,
                                              "name": "Panic",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2361,
                                              "src": "8046:5:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                                "typeString": "type(library Panic)"
                                              }
                                            },
                                            "id": 5521,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "8052:16:23",
                                            "memberName": "DIVISION_BY_ZERO",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2328,
                                            "src": "8046:22:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "expression": {
                                              "id": 5522,
                                              "name": "Panic",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2361,
                                              "src": "8070:5:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                                "typeString": "type(library Panic)"
                                              }
                                            },
                                            "id": 5523,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "8076:14:23",
                                            "memberName": "UNDER_OVERFLOW",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2324,
                                            "src": "8070:20:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 5516,
                                          "name": "ternary",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5378,
                                          "src": "8020:7:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5524,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8020:71:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 5513,
                                        "name": "Panic",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2361,
                                        "src": "8008:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                          "typeString": "type(library Panic)"
                                        }
                                      },
                                      "id": 5515,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8014:5:23",
                                      "memberName": "panic",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2360,
                                      "src": "8008:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                        "typeString": "function (uint256) pure"
                                      }
                                    },
                                    "id": 5525,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8008:84:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 5526,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8008:84:23"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              5530
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5530,
                                "mutability": "mutable",
                                "name": "remainder",
                                "nameLocation": "8367:9:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5614,
                                "src": "8359:17:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5529,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8359:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5531,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "8359:17:23"
                          },
                          {
                            "AST": {
                              "nativeSrc": "8415:283:23",
                              "nodeType": "YulBlock",
                              "src": "8415:283:23",
                              "statements": [
                                {
                                  "nativeSrc": "8484:38:23",
                                  "nodeType": "YulAssignment",
                                  "src": "8484:38:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nativeSrc": "8504:1:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "8504:1:23"
                                      },
                                      {
                                        "name": "y",
                                        "nativeSrc": "8507:1:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "8507:1:23"
                                      },
                                      {
                                        "name": "denominator",
                                        "nativeSrc": "8510:11:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "8510:11:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nativeSrc": "8497:6:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "8497:6:23"
                                    },
                                    "nativeSrc": "8497:25:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "8497:25:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "remainder",
                                      "nativeSrc": "8484:9:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "8484:9:23"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "8604:37:23",
                                  "nodeType": "YulAssignment",
                                  "src": "8604:37:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "high",
                                        "nativeSrc": "8616:4:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "8616:4:23"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "remainder",
                                            "nativeSrc": "8625:9:23",
                                            "nodeType": "YulIdentifier",
                                            "src": "8625:9:23"
                                          },
                                          {
                                            "name": "low",
                                            "nativeSrc": "8636:3:23",
                                            "nodeType": "YulIdentifier",
                                            "src": "8636:3:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "gt",
                                          "nativeSrc": "8622:2:23",
                                          "nodeType": "YulIdentifier",
                                          "src": "8622:2:23"
                                        },
                                        "nativeSrc": "8622:18:23",
                                        "nodeType": "YulFunctionCall",
                                        "src": "8622:18:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nativeSrc": "8612:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "8612:3:23"
                                    },
                                    "nativeSrc": "8612:29:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "8612:29:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "high",
                                      "nativeSrc": "8604:4:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "8604:4:23"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "8658:26:23",
                                  "nodeType": "YulAssignment",
                                  "src": "8658:26:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "low",
                                        "nativeSrc": "8669:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "8669:3:23"
                                      },
                                      {
                                        "name": "remainder",
                                        "nativeSrc": "8674:9:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "8674:9:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nativeSrc": "8665:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "8665:3:23"
                                    },
                                    "nativeSrc": "8665:19:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "8665:19:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "low",
                                      "nativeSrc": "8658:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "8658:3:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 5487,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8510:11:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5493,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8604:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5493,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8616:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5495,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8636:3:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5495,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8658:3:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5495,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8669:3:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5530,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8484:9:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5530,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8625:9:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5530,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8674:9:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5483,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8504:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5485,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8507:1:23",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 5532,
                            "nodeType": "InlineAssembly",
                            "src": "8390:308:23"
                          },
                          {
                            "assignments": [
                              5534
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5534,
                                "mutability": "mutable",
                                "name": "twos",
                                "nameLocation": "8910:4:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5614,
                                "src": "8902:12:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5533,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8902:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5541,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5540,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5535,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5487,
                                "src": "8917:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5538,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "30",
                                      "id": 5536,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8932:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 5537,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5487,
                                      "src": "8936:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8932:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5539,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8931:17:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8917:31:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "8902:46:23"
                          },
                          {
                            "AST": {
                              "nativeSrc": "8987:359:23",
                              "nodeType": "YulBlock",
                              "src": "8987:359:23",
                              "statements": [
                                {
                                  "nativeSrc": "9052:37:23",
                                  "nodeType": "YulAssignment",
                                  "src": "9052:37:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "denominator",
                                        "nativeSrc": "9071:11:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "9071:11:23"
                                      },
                                      {
                                        "name": "twos",
                                        "nativeSrc": "9084:4:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "9084:4:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nativeSrc": "9067:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "9067:3:23"
                                    },
                                    "nativeSrc": "9067:22:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "9067:22:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "denominator",
                                      "nativeSrc": "9052:11:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "9052:11:23"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "9153:21:23",
                                  "nodeType": "YulAssignment",
                                  "src": "9153:21:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "low",
                                        "nativeSrc": "9164:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "9164:3:23"
                                      },
                                      {
                                        "name": "twos",
                                        "nativeSrc": "9169:4:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "9169:4:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nativeSrc": "9160:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "9160:3:23"
                                    },
                                    "nativeSrc": "9160:14:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "9160:14:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "low",
                                      "nativeSrc": "9153:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "9153:3:23"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "9293:39:23",
                                  "nodeType": "YulAssignment",
                                  "src": "9293:39:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nativeSrc": "9313:1:23",
                                                "nodeType": "YulLiteral",
                                                "src": "9313:1:23",
                                                "type": "",
                                                "value": "0"
                                              },
                                              {
                                                "name": "twos",
                                                "nativeSrc": "9316:4:23",
                                                "nodeType": "YulIdentifier",
                                                "src": "9316:4:23"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nativeSrc": "9309:3:23",
                                              "nodeType": "YulIdentifier",
                                              "src": "9309:3:23"
                                            },
                                            "nativeSrc": "9309:12:23",
                                            "nodeType": "YulFunctionCall",
                                            "src": "9309:12:23"
                                          },
                                          {
                                            "name": "twos",
                                            "nativeSrc": "9323:4:23",
                                            "nodeType": "YulIdentifier",
                                            "src": "9323:4:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nativeSrc": "9305:3:23",
                                          "nodeType": "YulIdentifier",
                                          "src": "9305:3:23"
                                        },
                                        "nativeSrc": "9305:23:23",
                                        "nodeType": "YulFunctionCall",
                                        "src": "9305:23:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "9330:1:23",
                                        "nodeType": "YulLiteral",
                                        "src": "9330:1:23",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "9301:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "9301:3:23"
                                    },
                                    "nativeSrc": "9301:31:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "9301:31:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "twos",
                                      "nativeSrc": "9293:4:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "9293:4:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 5487,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9052:11:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5487,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9071:11:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5495,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9153:3:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5495,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9164:3:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5534,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9084:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5534,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9169:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5534,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9293:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5534,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9316:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5534,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9323:4:23",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 5542,
                            "nodeType": "InlineAssembly",
                            "src": "8962:384:23"
                          },
                          {
                            "expression": {
                              "id": 5547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5543,
                                "name": "low",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5495,
                                "src": "9409:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "|=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5546,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5544,
                                  "name": "high",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5493,
                                  "src": "9416:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 5545,
                                  "name": "twos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5534,
                                  "src": "9423:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9416:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9409:18:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5548,
                            "nodeType": "ExpressionStatement",
                            "src": "9409:18:23"
                          },
                          {
                            "assignments": [
                              5550
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5550,
                                "mutability": "mutable",
                                "name": "inverse",
                                "nameLocation": "9770:7:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5614,
                                "src": "9762:15:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5549,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9762:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5557,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5553,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "33",
                                      "id": 5551,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9781:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 5552,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5487,
                                      "src": "9785:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9781:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5554,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9780:17:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 5555,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9800:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "9780:21:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9762:39:23"
                          },
                          {
                            "expression": {
                              "id": 5564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5558,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5550,
                                "src": "10018:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 5559,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10029:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5562,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5560,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5487,
                                    "src": "10033:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 5561,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5550,
                                    "src": "10047:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10033:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10029:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10018:36:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5565,
                            "nodeType": "ExpressionStatement",
                            "src": "10018:36:23"
                          },
                          {
                            "expression": {
                              "id": 5572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5566,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5550,
                                "src": "10088:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5571,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 5567,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10099:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5570,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5568,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5487,
                                    "src": "10103:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 5569,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5550,
                                    "src": "10117:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10103:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10099:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10088:36:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5573,
                            "nodeType": "ExpressionStatement",
                            "src": "10088:36:23"
                          },
                          {
                            "expression": {
                              "id": 5580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5574,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5550,
                                "src": "10160:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5579,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 5575,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10171:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5578,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5576,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5487,
                                    "src": "10175:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 5577,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5550,
                                    "src": "10189:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10175:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10171:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10160:36:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5581,
                            "nodeType": "ExpressionStatement",
                            "src": "10160:36:23"
                          },
                          {
                            "expression": {
                              "id": 5588,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5582,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5550,
                                "src": "10231:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5587,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 5583,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10242:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5586,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5584,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5487,
                                    "src": "10246:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 5585,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5550,
                                    "src": "10260:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10246:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10242:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10231:36:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5589,
                            "nodeType": "ExpressionStatement",
                            "src": "10231:36:23"
                          },
                          {
                            "expression": {
                              "id": 5596,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5590,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5550,
                                "src": "10304:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5595,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 5591,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10315:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5594,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5592,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5487,
                                    "src": "10319:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 5593,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5550,
                                    "src": "10333:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10319:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10315:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10304:36:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5597,
                            "nodeType": "ExpressionStatement",
                            "src": "10304:36:23"
                          },
                          {
                            "expression": {
                              "id": 5604,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5598,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5550,
                                "src": "10378:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 5599,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10389:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5602,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5600,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5487,
                                    "src": "10393:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 5601,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5550,
                                    "src": "10407:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10393:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10389:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10378:36:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5605,
                            "nodeType": "ExpressionStatement",
                            "src": "10378:36:23"
                          },
                          {
                            "expression": {
                              "id": 5610,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 5606,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5490,
                                "src": "10859:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5607,
                                  "name": "low",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5495,
                                  "src": "10868:3:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 5608,
                                  "name": "inverse",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5550,
                                  "src": "10874:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10868:13:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10859:22:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5611,
                            "nodeType": "ExpressionStatement",
                            "src": "10859:22:23"
                          },
                          {
                            "expression": {
                              "id": 5612,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5490,
                              "src": "10902:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 5491,
                            "id": 5613,
                            "nodeType": "Return",
                            "src": "10895:13:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5481,
                    "nodeType": "StructuredDocumentation",
                    "src": "6925:312:23",
                    "text": " @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."
                  },
                  "id": 5616,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "7251:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5488,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5483,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "7266:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5616,
                        "src": "7258:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5482,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7258:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5485,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "7277:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5616,
                        "src": "7269:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5484,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7269:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5487,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "7288:11:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5616,
                        "src": "7280:19:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5486,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7280:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7257:43:23"
                  },
                  "returnParameters": {
                    "id": 5491,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5490,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "7332:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5616,
                        "src": "7324:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5489,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7324:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7323:16:23"
                  },
                  "scope": 6710,
                  "src": "7242:3683:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5652,
                    "nodeType": "Block",
                    "src": "11164:128:23",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 5632,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5619,
                                "src": "11188:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 5633,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5621,
                                "src": "11191:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 5634,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5623,
                                "src": "11194:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5631,
                              "name": "mulDiv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                5616,
                                5653
                              ],
                              "referencedDeclaration": 5616,
                              "src": "11181:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5635,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11181:25:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 5648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 5639,
                                      "name": "rounding",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5626,
                                      "src": "11242:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_Rounding_$5101",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_enum$_Rounding_$5101",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    ],
                                    "id": 5638,
                                    "name": "unsignedRoundsUp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6709,
                                    "src": "11225:16:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$5101_$returns$_t_bool_$",
                                      "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                    }
                                  },
                                  "id": 5640,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11225:26:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5647,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 5642,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5619,
                                        "src": "11262:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 5643,
                                        "name": "y",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5621,
                                        "src": "11265:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 5644,
                                        "name": "denominator",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5623,
                                        "src": "11268:11:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 5641,
                                      "name": "mulmod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -16,
                                      "src": "11255:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5645,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "11255:25:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 5646,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11283:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "11255:29:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "11225:59:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "expression": {
                                "id": 5636,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8475,
                                "src": "11209:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 5637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11218:6:23",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8474,
                              "src": "11209:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 5649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11209:76:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11181:104:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5630,
                        "id": 5651,
                        "nodeType": "Return",
                        "src": "11174:111:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5617,
                    "nodeType": "StructuredDocumentation",
                    "src": "10931:118:23",
                    "text": " @dev Calculates x * y / denominator with full precision, following the selected rounding direction."
                  },
                  "id": 5653,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "11063:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5627,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5619,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "11078:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5653,
                        "src": "11070:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5618,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11070:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5621,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "11089:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5653,
                        "src": "11081:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5620,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11081:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5623,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "11100:11:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5653,
                        "src": "11092:19:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5622,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11092:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5626,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "11122:8:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5653,
                        "src": "11113:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$5101",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 5625,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 5624,
                            "name": "Rounding",
                            "nameLocations": [
                              "11113:8:23"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5101,
                            "src": "11113:8:23"
                          },
                          "referencedDeclaration": 5101,
                          "src": "11113:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$5101",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11069:62:23"
                  },
                  "returnParameters": {
                    "id": 5630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5629,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5653,
                        "src": "11155:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5628,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11155:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11154:9:23"
                  },
                  "scope": 6710,
                  "src": "11054:238:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5702,
                    "nodeType": "Block",
                    "src": "11500:245:23",
                    "statements": [
                      {
                        "id": 5701,
                        "nodeType": "UncheckedBlock",
                        "src": "11510:229:23",
                        "statements": [
                          {
                            "assignments": [
                              5666,
                              5668
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5666,
                                "mutability": "mutable",
                                "name": "high",
                                "nameLocation": "11543:4:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5701,
                                "src": "11535:12:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5665,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11535:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 5668,
                                "mutability": "mutable",
                                "name": "low",
                                "nameLocation": "11557:3:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5701,
                                "src": "11549:11:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5667,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11549:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5673,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 5670,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5656,
                                  "src": "11571:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 5671,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5658,
                                  "src": "11574:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 5669,
                                "name": "mul512",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5129,
                                "src": "11564:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256,uint256)"
                                }
                              },
                              "id": 5672,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11564:12:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "11534:42:23"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5674,
                                "name": "high",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5666,
                                "src": "11594:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "31",
                                  "id": 5675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11602:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "id": 5676,
                                  "name": "n",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5660,
                                  "src": "11607:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "11602:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11594:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5687,
                            "nodeType": "IfStatement",
                            "src": "11590:86:23",
                            "trueBody": {
                              "id": 5686,
                              "nodeType": "Block",
                              "src": "11610:66:23",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 5682,
                                          "name": "Panic",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2361,
                                          "src": "11640:5:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                            "typeString": "type(library Panic)"
                                          }
                                        },
                                        "id": 5683,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "11646:14:23",
                                        "memberName": "UNDER_OVERFLOW",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2324,
                                        "src": "11640:20:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 5679,
                                        "name": "Panic",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2361,
                                        "src": "11628:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                          "typeString": "type(library Panic)"
                                        }
                                      },
                                      "id": 5681,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "11634:5:23",
                                      "memberName": "panic",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2360,
                                      "src": "11628:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                        "typeString": "function (uint256) pure"
                                      }
                                    },
                                    "id": 5684,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "11628:33:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 5685,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11628:33:23"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5693,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5688,
                                      "name": "high",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5666,
                                      "src": "11697:4:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint16",
                                            "typeString": "uint16"
                                          },
                                          "id": 5691,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "323536",
                                            "id": 5689,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11706:3:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_256_by_1",
                                              "typeString": "int_const 256"
                                            },
                                            "value": "256"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "id": 5690,
                                            "name": "n",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5660,
                                            "src": "11712:1:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "src": "11706:7:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint16",
                                            "typeString": "uint16"
                                          }
                                        }
                                      ],
                                      "id": 5692,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "11705:9:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "src": "11697:17:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5694,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "11696:19:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "|",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5697,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5695,
                                      "name": "low",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5668,
                                      "src": "11719:3:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">>",
                                    "rightExpression": {
                                      "id": 5696,
                                      "name": "n",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5660,
                                      "src": "11726:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "11719:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5698,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "11718:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11696:32:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 5664,
                            "id": 5700,
                            "nodeType": "Return",
                            "src": "11689:39:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5654,
                    "nodeType": "StructuredDocumentation",
                    "src": "11298:111:23",
                    "text": " @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256."
                  },
                  "id": 5703,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulShr",
                  "nameLocation": "11423:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5661,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5656,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "11438:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5703,
                        "src": "11430:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5655,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11430:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5658,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "11449:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5703,
                        "src": "11441:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5657,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11441:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5660,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "11458:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5703,
                        "src": "11452:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5659,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "11452:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11429:31:23"
                  },
                  "returnParameters": {
                    "id": 5664,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5663,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "11492:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5703,
                        "src": "11484:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5662,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11484:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11483:16:23"
                  },
                  "scope": 6710,
                  "src": "11414:331:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5741,
                    "nodeType": "Block",
                    "src": "11963:113:23",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 5719,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5706,
                                "src": "11987:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 5720,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5708,
                                "src": "11990:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 5721,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5710,
                                "src": "11993:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 5718,
                              "name": "mulShr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                5703,
                                5742
                              ],
                              "referencedDeclaration": 5703,
                              "src": "11980:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint8_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint8) pure returns (uint256)"
                              }
                            },
                            "id": 5722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11980:15:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 5737,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 5726,
                                      "name": "rounding",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5713,
                                      "src": "12031:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_Rounding_$5101",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_enum$_Rounding_$5101",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    ],
                                    "id": 5725,
                                    "name": "unsignedRoundsUp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6709,
                                    "src": "12014:16:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$5101_$returns$_t_bool_$",
                                      "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                    }
                                  },
                                  "id": 5727,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12014:26:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5736,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 5729,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5706,
                                        "src": "12051:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 5730,
                                        "name": "y",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5708,
                                        "src": "12054:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 5733,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 5731,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "12057:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "id": 5732,
                                          "name": "n",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5710,
                                          "src": "12062:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "src": "12057:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 5728,
                                      "name": "mulmod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -16,
                                      "src": "12044:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5734,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12044:20:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 5735,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12067:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "12044:24:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "12014:54:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "expression": {
                                "id": 5723,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8475,
                                "src": "11998:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 5724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12007:6:23",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8474,
                              "src": "11998:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 5738,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11998:71:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11980:89:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5717,
                        "id": 5740,
                        "nodeType": "Return",
                        "src": "11973:96:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5704,
                    "nodeType": "StructuredDocumentation",
                    "src": "11751:109:23",
                    "text": " @dev Calculates x * y >> n with full precision, following the selected rounding direction."
                  },
                  "id": 5742,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulShr",
                  "nameLocation": "11874:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5714,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5706,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "11889:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5742,
                        "src": "11881:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5705,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11881:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5708,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "11900:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5742,
                        "src": "11892:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5707,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11892:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5710,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "11909:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5742,
                        "src": "11903:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5709,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "11903:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5713,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "11921:8:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5742,
                        "src": "11912:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$5101",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 5712,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 5711,
                            "name": "Rounding",
                            "nameLocations": [
                              "11912:8:23"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5101,
                            "src": "11912:8:23"
                          },
                          "referencedDeclaration": 5101,
                          "src": "11912:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$5101",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11880:50:23"
                  },
                  "returnParameters": {
                    "id": 5717,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5716,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5742,
                        "src": "11954:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5715,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11954:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11953:9:23"
                  },
                  "scope": 6710,
                  "src": "11865:211:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5838,
                    "nodeType": "Block",
                    "src": "12710:1849:23",
                    "statements": [
                      {
                        "id": 5837,
                        "nodeType": "UncheckedBlock",
                        "src": "12720:1833:23",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5754,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5752,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5747,
                                "src": "12748:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12753:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "12748:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5757,
                            "nodeType": "IfStatement",
                            "src": "12744:20:23",
                            "trueBody": {
                              "expression": {
                                "hexValue": "30",
                                "id": 5755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12763:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 5751,
                              "id": 5756,
                              "nodeType": "Return",
                              "src": "12756:8:23"
                            }
                          },
                          {
                            "assignments": [
                              5759
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5759,
                                "mutability": "mutable",
                                "name": "remainder",
                                "nameLocation": "13243:9:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5837,
                                "src": "13235:17:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5758,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13235:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5763,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5762,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5760,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5745,
                                "src": "13255:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "id": 5761,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5747,
                                "src": "13259:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "13255:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13235:25:23"
                          },
                          {
                            "assignments": [
                              5765
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5765,
                                "mutability": "mutable",
                                "name": "gcd",
                                "nameLocation": "13282:3:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5837,
                                "src": "13274:11:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5764,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13274:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5767,
                            "initialValue": {
                              "id": 5766,
                              "name": "n",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5747,
                              "src": "13288:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13274:15:23"
                          },
                          {
                            "assignments": [
                              5769
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5769,
                                "mutability": "mutable",
                                "name": "x",
                                "nameLocation": "13432:1:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5837,
                                "src": "13425:8:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "typeName": {
                                  "id": 5768,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13425:6:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5771,
                            "initialValue": {
                              "hexValue": "30",
                              "id": 5770,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13436:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13425:12:23"
                          },
                          {
                            "assignments": [
                              5773
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5773,
                                "mutability": "mutable",
                                "name": "y",
                                "nameLocation": "13458:1:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 5837,
                                "src": "13451:8:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "typeName": {
                                  "id": 5772,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13451:6:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5775,
                            "initialValue": {
                              "hexValue": "31",
                              "id": 5774,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13462:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13451:12:23"
                          },
                          {
                            "body": {
                              "id": 5812,
                              "nodeType": "Block",
                              "src": "13501:882:23",
                              "statements": [
                                {
                                  "assignments": [
                                    5780
                                  ],
                                  "declarations": [
                                    {
                                      "constant": false,
                                      "id": 5780,
                                      "mutability": "mutable",
                                      "name": "quotient",
                                      "nameLocation": "13527:8:23",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 5812,
                                      "src": "13519:16:23",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 5779,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13519:7:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    }
                                  ],
                                  "id": 5784,
                                  "initialValue": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5783,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5781,
                                      "name": "gcd",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5765,
                                      "src": "13538:3:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "id": 5782,
                                      "name": "remainder",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5759,
                                      "src": "13544:9:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "13538:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "VariableDeclarationStatement",
                                  "src": "13519:34:23"
                                },
                                {
                                  "expression": {
                                    "id": 5795,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "components": [
                                        {
                                          "id": 5785,
                                          "name": "gcd",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5765,
                                          "src": "13573:3:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 5786,
                                          "name": "remainder",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5759,
                                          "src": "13578:9:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 5787,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "13572:16:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "components": [
                                        {
                                          "id": 5788,
                                          "name": "remainder",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5759,
                                          "src": "13678:9:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5793,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5789,
                                            "name": "gcd",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5765,
                                            "src": "13923:3:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 5792,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 5790,
                                              "name": "remainder",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5759,
                                              "src": "13929:9:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "*",
                                            "rightExpression": {
                                              "id": 5791,
                                              "name": "quotient",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5780,
                                              "src": "13941:8:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "13929:20:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "13923:26:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 5794,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "13591:376:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256)"
                                      }
                                    },
                                    "src": "13572:395:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 5796,
                                  "nodeType": "ExpressionStatement",
                                  "src": "13572:395:23"
                                },
                                {
                                  "expression": {
                                    "id": 5810,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "components": [
                                        {
                                          "id": 5797,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5769,
                                          "src": "13987:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        {
                                          "id": 5798,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5773,
                                          "src": "13990:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "id": 5799,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "13986:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                                        "typeString": "tuple(int256,int256)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "components": [
                                        {
                                          "id": 5800,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5773,
                                          "src": "14072:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          },
                                          "id": 5808,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5801,
                                            "name": "x",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5769,
                                            "src": "14326:1:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            },
                                            "id": 5807,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 5802,
                                              "name": "y",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5773,
                                              "src": "14330:1:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int256",
                                                "typeString": "int256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "*",
                                            "rightExpression": {
                                              "arguments": [
                                                {
                                                  "id": 5805,
                                                  "name": "quotient",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5780,
                                                  "src": "14341:8:23",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "id": 5804,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "14334:6:23",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_int256_$",
                                                  "typeString": "type(int256)"
                                                },
                                                "typeName": {
                                                  "id": 5803,
                                                  "name": "int256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "14334:6:23",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 5806,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "14334:16:23",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int256",
                                                "typeString": "int256"
                                              }
                                            },
                                            "src": "14330:20:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "src": "14326:24:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "id": 5809,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "13995:373:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                                        "typeString": "tuple(int256,int256)"
                                      }
                                    },
                                    "src": "13986:382:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 5811,
                                  "nodeType": "ExpressionStatement",
                                  "src": "13986:382:23"
                                }
                              ]
                            },
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5778,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5776,
                                "name": "remainder",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5759,
                                "src": "13485:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5777,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13498:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "13485:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5813,
                            "nodeType": "WhileStatement",
                            "src": "13478:905:23"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5816,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5814,
                                "name": "gcd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5765,
                                "src": "14401:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 5815,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14408:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "14401:8:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5819,
                            "nodeType": "IfStatement",
                            "src": "14397:22:23",
                            "trueBody": {
                              "expression": {
                                "hexValue": "30",
                                "id": 5817,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14418:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 5751,
                              "id": 5818,
                              "nodeType": "Return",
                              "src": "14411:8:23"
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 5823,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5821,
                                    "name": "x",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5769,
                                    "src": "14470:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 5822,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14474:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "14470:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5830,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5824,
                                    "name": "n",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5747,
                                    "src": "14477:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "id": 5828,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "14489:2:23",
                                        "subExpression": {
                                          "id": 5827,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5769,
                                          "src": "14490:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      ],
                                      "id": 5826,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "14481:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 5825,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14481:7:23",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 5829,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14481:11:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "14477:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 5833,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5769,
                                      "src": "14502:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 5832,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "14494:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 5831,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "14494:7:23",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5834,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14494:10:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 5820,
                                "name": "ternary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5378,
                                "src": "14462:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5835,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14462:43:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 5751,
                            "id": 5836,
                            "nodeType": "Return",
                            "src": "14455:50:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5743,
                    "nodeType": "StructuredDocumentation",
                    "src": "12082:553:23",
                    "text": " @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n If the input value is not inversible, 0 is returned.\n NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}."
                  },
                  "id": 5839,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "invMod",
                  "nameLocation": "12649:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5745,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "12664:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5839,
                        "src": "12656:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5744,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12656:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5747,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "12675:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5839,
                        "src": "12667:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5746,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12667:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12655:22:23"
                  },
                  "returnParameters": {
                    "id": 5751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5750,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5839,
                        "src": "12701:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5749,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12701:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12700:9:23"
                  },
                  "scope": 6710,
                  "src": "12640:1919:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5859,
                    "nodeType": "Block",
                    "src": "15159:82:23",
                    "statements": [
                      {
                        "id": 5858,
                        "nodeType": "UncheckedBlock",
                        "src": "15169:66:23",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5851,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5842,
                                  "src": "15212:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5854,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5852,
                                    "name": "p",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5844,
                                    "src": "15215:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "32",
                                    "id": 5853,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15219:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "15215:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 5855,
                                  "name": "p",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5844,
                                  "src": "15222:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 5849,
                                  "name": "Math",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6710,
                                  "src": "15200:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Math_$6710_$",
                                    "typeString": "type(library Math)"
                                  }
                                },
                                "id": 5850,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "15205:6:23",
                                "memberName": "modExp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5896,
                                "src": "15200:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) view returns (uint256)"
                                }
                              },
                              "id": 5856,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15200:24:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 5848,
                            "id": 5857,
                            "nodeType": "Return",
                            "src": "15193:31:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5840,
                    "nodeType": "StructuredDocumentation",
                    "src": "14565:514:23",
                    "text": " @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n NOTE: this function does NOT check that `p` is a prime greater than `2`."
                  },
                  "id": 5860,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "invModPrime",
                  "nameLocation": "15093:11:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5845,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5842,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "15113:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5860,
                        "src": "15105:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5841,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15105:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5844,
                        "mutability": "mutable",
                        "name": "p",
                        "nameLocation": "15124:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5860,
                        "src": "15116:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5843,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15116:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15104:22:23"
                  },
                  "returnParameters": {
                    "id": 5848,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5847,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5860,
                        "src": "15150:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5846,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15150:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15149:9:23"
                  },
                  "scope": 6710,
                  "src": "15084:157:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5895,
                    "nodeType": "Block",
                    "src": "16011:174:23",
                    "statements": [
                      {
                        "assignments": [
                          5873,
                          5875
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5873,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "16027:7:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5895,
                            "src": "16022:12:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5872,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "16022:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5875,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "16044:6:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5895,
                            "src": "16036:14:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5874,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "16036:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5881,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5877,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5863,
                              "src": "16064:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5878,
                              "name": "e",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "16067:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5879,
                              "name": "m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5867,
                              "src": "16070:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5876,
                            "name": "tryModExp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5920,
                              6002
                            ],
                            "referencedDeclaration": 5920,
                            "src": "16054:9:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) view returns (bool,uint256)"
                            }
                          },
                          "id": 5880,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16054:18:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16021:51:23"
                      },
                      {
                        "condition": {
                          "id": 5883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16086:8:23",
                          "subExpression": {
                            "id": 5882,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5873,
                            "src": "16087:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5892,
                        "nodeType": "IfStatement",
                        "src": "16082:74:23",
                        "trueBody": {
                          "id": 5891,
                          "nodeType": "Block",
                          "src": "16096:60:23",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 5887,
                                      "name": "Panic",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2361,
                                      "src": "16122:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                        "typeString": "type(library Panic)"
                                      }
                                    },
                                    "id": 5888,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "16128:16:23",
                                    "memberName": "DIVISION_BY_ZERO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2328,
                                    "src": "16122:22:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5884,
                                    "name": "Panic",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2361,
                                    "src": "16110:5:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                      "typeString": "type(library Panic)"
                                    }
                                  },
                                  "id": 5886,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "16116:5:23",
                                  "memberName": "panic",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2360,
                                  "src": "16110:11:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 5889,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16110:35:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 5890,
                              "nodeType": "ExpressionStatement",
                              "src": "16110:35:23"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 5893,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5875,
                          "src": "16172:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5871,
                        "id": 5894,
                        "nodeType": "Return",
                        "src": "16165:13:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5861,
                    "nodeType": "StructuredDocumentation",
                    "src": "15247:678:23",
                    "text": " @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n Requirements:\n - modulus can't be zero\n - underlying staticcall to precompile must succeed\n IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n sure the chain you're using it on supports the precompiled contract for modular exponentiation\n at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n interpreted as 0."
                  },
                  "id": 5896,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "modExp",
                  "nameLocation": "15939:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5868,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5863,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "15954:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5896,
                        "src": "15946:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5862,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15946:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5865,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "15965:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5896,
                        "src": "15957:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5864,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15957:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5867,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "15976:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5896,
                        "src": "15968:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5866,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15968:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15945:33:23"
                  },
                  "returnParameters": {
                    "id": 5871,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5870,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5896,
                        "src": "16002:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5869,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16002:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16001:9:23"
                  },
                  "scope": 6710,
                  "src": "15930:255:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5919,
                    "nodeType": "Block",
                    "src": "17039:1493:23",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5910,
                            "name": "m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5903,
                            "src": "17053:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5911,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17058:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "17053:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5917,
                        "nodeType": "IfStatement",
                        "src": "17049:29:23",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17069:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 5914,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17076:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5915,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "17068:10:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5909,
                          "id": 5916,
                          "nodeType": "Return",
                          "src": "17061:17:23"
                        }
                      },
                      {
                        "AST": {
                          "nativeSrc": "17113:1413:23",
                          "nodeType": "YulBlock",
                          "src": "17113:1413:23",
                          "statements": [
                            {
                              "nativeSrc": "17127:22:23",
                              "nodeType": "YulVariableDeclaration",
                              "src": "17127:22:23",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "17144:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "17144:4:23",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "17138:5:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "17138:5:23"
                                },
                                "nativeSrc": "17138:11:23",
                                "nodeType": "YulFunctionCall",
                                "src": "17138:11:23"
                              },
                              "variables": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "17131:3:23",
                                  "nodeType": "YulTypedName",
                                  "src": "17131:3:23",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ptr",
                                    "nativeSrc": "18057:3:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "18057:3:23"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18062:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18062:4:23",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18050:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18050:6:23"
                                },
                                "nativeSrc": "18050:17:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18050:17:23"
                              },
                              "nativeSrc": "18050:17:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "18050:17:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18091:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "18091:3:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18096:4:23",
                                        "nodeType": "YulLiteral",
                                        "src": "18096:4:23",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18087:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "18087:3:23"
                                    },
                                    "nativeSrc": "18087:14:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18087:14:23"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18103:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18103:4:23",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18080:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18080:6:23"
                                },
                                "nativeSrc": "18080:28:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18080:28:23"
                              },
                              "nativeSrc": "18080:28:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "18080:28:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18132:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "18132:3:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18137:4:23",
                                        "nodeType": "YulLiteral",
                                        "src": "18137:4:23",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18128:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "18128:3:23"
                                    },
                                    "nativeSrc": "18128:14:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18128:14:23"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18144:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18144:4:23",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18121:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18121:6:23"
                                },
                                "nativeSrc": "18121:28:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18121:28:23"
                              },
                              "nativeSrc": "18121:28:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "18121:28:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18173:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "18173:3:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18178:4:23",
                                        "nodeType": "YulLiteral",
                                        "src": "18178:4:23",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18169:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "18169:3:23"
                                    },
                                    "nativeSrc": "18169:14:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18169:14:23"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "18185:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "18185:1:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18162:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18162:6:23"
                                },
                                "nativeSrc": "18162:25:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18162:25:23"
                              },
                              "nativeSrc": "18162:25:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "18162:25:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18211:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "18211:3:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18216:4:23",
                                        "nodeType": "YulLiteral",
                                        "src": "18216:4:23",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18207:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "18207:3:23"
                                    },
                                    "nativeSrc": "18207:14:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18207:14:23"
                                  },
                                  {
                                    "name": "e",
                                    "nativeSrc": "18223:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "18223:1:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18200:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18200:6:23"
                                },
                                "nativeSrc": "18200:25:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18200:25:23"
                              },
                              "nativeSrc": "18200:25:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "18200:25:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18249:3:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "18249:3:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18254:4:23",
                                        "nodeType": "YulLiteral",
                                        "src": "18254:4:23",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18245:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "18245:3:23"
                                    },
                                    "nativeSrc": "18245:14:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18245:14:23"
                                  },
                                  {
                                    "name": "m",
                                    "nativeSrc": "18261:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "18261:1:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18238:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18238:6:23"
                                },
                                "nativeSrc": "18238:25:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18238:25:23"
                              },
                              "nativeSrc": "18238:25:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "18238:25:23"
                            },
                            {
                              "nativeSrc": "18425:57:23",
                              "nodeType": "YulAssignment",
                              "src": "18425:57:23",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "gas",
                                      "nativeSrc": "18447:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "18447:3:23"
                                    },
                                    "nativeSrc": "18447:5:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18447:5:23"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18454:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18454:4:23",
                                    "type": "",
                                    "value": "0x05"
                                  },
                                  {
                                    "name": "ptr",
                                    "nativeSrc": "18460:3:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "18460:3:23"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18465:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18465:4:23",
                                    "type": "",
                                    "value": "0xc0"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18471:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18471:4:23",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18477:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18477:4:23",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "staticcall",
                                  "nativeSrc": "18436:10:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18436:10:23"
                                },
                                "nativeSrc": "18436:46:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18436:46:23"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nativeSrc": "18425:7:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18425:7:23"
                                }
                              ]
                            },
                            {
                              "nativeSrc": "18495:21:23",
                              "nodeType": "YulAssignment",
                              "src": "18495:21:23",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18511:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "18511:4:23",
                                    "type": "",
                                    "value": "0x00"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "18505:5:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18505:5:23"
                                },
                                "nativeSrc": "18505:11:23",
                                "nodeType": "YulFunctionCall",
                                "src": "18505:11:23"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "18495:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "18495:6:23"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 5899,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18185:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5901,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18223:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5903,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18261:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5908,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18495:6:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5906,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18425:7:23",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 5918,
                        "nodeType": "InlineAssembly",
                        "src": "17088:1438:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5897,
                    "nodeType": "StructuredDocumentation",
                    "src": "16191:738:23",
                    "text": " @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n to operate modulo 0 or if the underlying precompile reverted.\n IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n of a revert, but the result may be incorrectly interpreted as 0."
                  },
                  "id": 5920,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryModExp",
                  "nameLocation": "16943:9:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5904,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5899,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "16961:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5920,
                        "src": "16953:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5898,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16953:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5901,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "16972:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5920,
                        "src": "16964:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5900,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16964:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5903,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "16983:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5920,
                        "src": "16975:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5902,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16975:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16952:33:23"
                  },
                  "returnParameters": {
                    "id": 5909,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5906,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "17014:7:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5920,
                        "src": "17009:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5905,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "17009:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5908,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "17031:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5920,
                        "src": "17023:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5907,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17023:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17008:30:23"
                  },
                  "scope": 6710,
                  "src": "16934:1598:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5955,
                    "nodeType": "Block",
                    "src": "18729:179:23",
                    "statements": [
                      {
                        "assignments": [
                          5933,
                          5935
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5933,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "18745:7:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5955,
                            "src": "18740:12:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5932,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "18740:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5935,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "18767:6:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 5955,
                            "src": "18754:19:23",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 5934,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "18754:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5941,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5937,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5923,
                              "src": "18787:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 5938,
                              "name": "e",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5925,
                              "src": "18790:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 5939,
                              "name": "m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5927,
                              "src": "18793:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 5936,
                            "name": "tryModExp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5920,
                              6002
                            ],
                            "referencedDeclaration": 6002,
                            "src": "18777:9:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 5940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18777:18:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18739:56:23"
                      },
                      {
                        "condition": {
                          "id": 5943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "18809:8:23",
                          "subExpression": {
                            "id": 5942,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5933,
                            "src": "18810:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5952,
                        "nodeType": "IfStatement",
                        "src": "18805:74:23",
                        "trueBody": {
                          "id": 5951,
                          "nodeType": "Block",
                          "src": "18819:60:23",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 5947,
                                      "name": "Panic",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2361,
                                      "src": "18845:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                        "typeString": "type(library Panic)"
                                      }
                                    },
                                    "id": 5948,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "18851:16:23",
                                    "memberName": "DIVISION_BY_ZERO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2328,
                                    "src": "18845:22:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5944,
                                    "name": "Panic",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2361,
                                    "src": "18833:5:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Panic_$2361_$",
                                      "typeString": "type(library Panic)"
                                    }
                                  },
                                  "id": 5946,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "18839:5:23",
                                  "memberName": "panic",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2360,
                                  "src": "18833:11:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 5949,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18833:35:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 5950,
                              "nodeType": "ExpressionStatement",
                              "src": "18833:35:23"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 5953,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5935,
                          "src": "18895:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 5931,
                        "id": 5954,
                        "nodeType": "Return",
                        "src": "18888:13:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5921,
                    "nodeType": "StructuredDocumentation",
                    "src": "18538:85:23",
                    "text": " @dev Variant of {modExp} that supports inputs of arbitrary length."
                  },
                  "id": 5956,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "modExp",
                  "nameLocation": "18637:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5928,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5923,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "18657:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5956,
                        "src": "18644:14:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5922,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18644:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5925,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "18673:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5956,
                        "src": "18660:14:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5924,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18660:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5927,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "18689:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 5956,
                        "src": "18676:14:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5926,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18676:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18643:48:23"
                  },
                  "returnParameters": {
                    "id": 5931,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5930,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5956,
                        "src": "18715:12:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5929,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18715:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18714:14:23"
                  },
                  "scope": 6710,
                  "src": "18628:280:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6001,
                    "nodeType": "Block",
                    "src": "19162:771:23",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 5971,
                              "name": "m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5963,
                              "src": "19187:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 5970,
                            "name": "_zeroBytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6035,
                            "src": "19176:10:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes memory) pure returns (bool)"
                            }
                          },
                          "id": 5972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19176:13:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5980,
                        "nodeType": "IfStatement",
                        "src": "19172:47:23",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5973,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19199:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5976,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19216:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5975,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "19206:9:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (uint256) pure returns (bytes memory)"
                                  },
                                  "typeName": {
                                    "id": 5974,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "19210:5:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  }
                                },
                                "id": 5977,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19206:12:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "id": 5978,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "19198:21:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "tuple(bool,bytes memory)"
                            }
                          },
                          "functionReturnParameters": 5969,
                          "id": 5979,
                          "nodeType": "Return",
                          "src": "19191:28:23"
                        }
                      },
                      {
                        "assignments": [
                          5982
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5982,
                            "mutability": "mutable",
                            "name": "mLen",
                            "nameLocation": "19238:4:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 6001,
                            "src": "19230:12:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5981,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "19230:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5985,
                        "initialValue": {
                          "expression": {
                            "id": 5983,
                            "name": "m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5963,
                            "src": "19245:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 5984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19247:6:23",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "19245:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19230:23:23"
                      },
                      {
                        "expression": {
                          "id": 5998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5986,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5968,
                            "src": "19335:6:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 5989,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5959,
                                  "src": "19361:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 5990,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "19363:6:23",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "19361:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "expression": {
                                  "id": 5991,
                                  "name": "e",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5961,
                                  "src": "19371:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 5992,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "19373:6:23",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "19371:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 5993,
                                "name": "mLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5982,
                                "src": "19381:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 5994,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5959,
                                "src": "19387:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "id": 5995,
                                "name": "e",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5961,
                                "src": "19390:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "id": 5996,
                                "name": "m",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5963,
                                "src": "19393:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 5987,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "19344:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 5988,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "19348:12:23",
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "src": "19344:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 5997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19344:51:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "19335:60:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5999,
                        "nodeType": "ExpressionStatement",
                        "src": "19335:60:23"
                      },
                      {
                        "AST": {
                          "nativeSrc": "19431:496:23",
                          "nodeType": "YulBlock",
                          "src": "19431:496:23",
                          "statements": [
                            {
                              "nativeSrc": "19445:32:23",
                              "nodeType": "YulVariableDeclaration",
                              "src": "19445:32:23",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nativeSrc": "19464:6:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "19464:6:23"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "19472:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "19472:4:23",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "19460:3:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "19460:3:23"
                                },
                                "nativeSrc": "19460:17:23",
                                "nodeType": "YulFunctionCall",
                                "src": "19460:17:23"
                              },
                              "variables": [
                                {
                                  "name": "dataPtr",
                                  "nativeSrc": "19449:7:23",
                                  "nodeType": "YulTypedName",
                                  "src": "19449:7:23",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "19567:73:23",
                              "nodeType": "YulAssignment",
                              "src": "19567:73:23",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "gas",
                                      "nativeSrc": "19589:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "19589:3:23"
                                    },
                                    "nativeSrc": "19589:5:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19589:5:23"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "19596:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "19596:4:23",
                                    "type": "",
                                    "value": "0x05"
                                  },
                                  {
                                    "name": "dataPtr",
                                    "nativeSrc": "19602:7:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "19602:7:23"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "result",
                                        "nativeSrc": "19617:6:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "19617:6:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "19611:5:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "19611:5:23"
                                    },
                                    "nativeSrc": "19611:13:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19611:13:23"
                                  },
                                  {
                                    "name": "dataPtr",
                                    "nativeSrc": "19626:7:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "19626:7:23"
                                  },
                                  {
                                    "name": "mLen",
                                    "nativeSrc": "19635:4:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "19635:4:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "staticcall",
                                  "nativeSrc": "19578:10:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "19578:10:23"
                                },
                                "nativeSrc": "19578:62:23",
                                "nodeType": "YulFunctionCall",
                                "src": "19578:62:23"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nativeSrc": "19567:7:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "19567:7:23"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nativeSrc": "19796:6:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "19796:6:23"
                                  },
                                  {
                                    "name": "mLen",
                                    "nativeSrc": "19804:4:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "19804:4:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "19789:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "19789:6:23"
                                },
                                "nativeSrc": "19789:20:23",
                                "nodeType": "YulFunctionCall",
                                "src": "19789:20:23"
                              },
                              "nativeSrc": "19789:20:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "19789:20:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "19892:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "19892:4:23",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataPtr",
                                        "nativeSrc": "19902:7:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "19902:7:23"
                                      },
                                      {
                                        "name": "mLen",
                                        "nativeSrc": "19911:4:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "19911:4:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "19898:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "19898:3:23"
                                    },
                                    "nativeSrc": "19898:18:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19898:18:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "19885:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "19885:6:23"
                                },
                                "nativeSrc": "19885:32:23",
                                "nodeType": "YulFunctionCall",
                                "src": "19885:32:23"
                              },
                              "nativeSrc": "19885:32:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "19885:32:23"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 5982,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19635:4:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5982,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19804:4:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5982,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19911:4:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5968,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19464:6:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5968,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19617:6:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5968,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19796:6:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5966,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19567:7:23",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 6000,
                        "nodeType": "InlineAssembly",
                        "src": "19406:521:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5957,
                    "nodeType": "StructuredDocumentation",
                    "src": "18914:88:23",
                    "text": " @dev Variant of {tryModExp} that supports inputs of arbitrary length."
                  },
                  "id": 6002,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryModExp",
                  "nameLocation": "19016:9:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5959,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "19048:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6002,
                        "src": "19035:14:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5958,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19035:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5961,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "19072:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6002,
                        "src": "19059:14:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5960,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19059:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5963,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "19096:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6002,
                        "src": "19083:14:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5962,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19083:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19025:78:23"
                  },
                  "returnParameters": {
                    "id": 5969,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5966,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "19132:7:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6002,
                        "src": "19127:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5965,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19127:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5968,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "19154:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6002,
                        "src": "19141:19:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5967,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19141:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19126:35:23"
                  },
                  "scope": 6710,
                  "src": "19007:926:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6034,
                    "nodeType": "Block",
                    "src": "20088:176:23",
                    "statements": [
                      {
                        "body": {
                          "id": 6030,
                          "nodeType": "Block",
                          "src": "20145:92:23",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                },
                                "id": 6025,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "id": 6021,
                                    "name": "byteArray",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6005,
                                    "src": "20163:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 6023,
                                  "indexExpression": {
                                    "id": 6022,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6011,
                                    "src": "20173:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "20163:12:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6024,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20179:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "20163:17:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6029,
                              "nodeType": "IfStatement",
                              "src": "20159:68:23",
                              "trueBody": {
                                "id": 6028,
                                "nodeType": "Block",
                                "src": "20182:45:23",
                                "statements": [
                                  {
                                    "expression": {
                                      "hexValue": "66616c7365",
                                      "id": 6026,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "20207:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 6009,
                                    "id": 6027,
                                    "nodeType": "Return",
                                    "src": "20200:12:23"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6014,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6011,
                            "src": "20118:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 6015,
                              "name": "byteArray",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6005,
                              "src": "20122:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 6016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "20132:6:23",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "20122:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20118:20:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6031,
                        "initializationExpression": {
                          "assignments": [
                            6011
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 6011,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "20111:1:23",
                              "nodeType": "VariableDeclaration",
                              "scope": 6031,
                              "src": "20103:9:23",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 6010,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "20103:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 6013,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 6012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20115:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "20103:13:23"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 6019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "20140:3:23",
                            "subExpression": {
                              "id": 6018,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6011,
                              "src": "20142:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6020,
                          "nodeType": "ExpressionStatement",
                          "src": "20140:3:23"
                        },
                        "nodeType": "ForStatement",
                        "src": "20098:139:23"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 6032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20253:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6009,
                        "id": 6033,
                        "nodeType": "Return",
                        "src": "20246:11:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6003,
                    "nodeType": "StructuredDocumentation",
                    "src": "19939:72:23",
                    "text": " @dev Returns whether the provided byte array is zero."
                  },
                  "id": 6035,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_zeroBytes",
                  "nameLocation": "20025:10:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6006,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6005,
                        "mutability": "mutable",
                        "name": "byteArray",
                        "nameLocation": "20049:9:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6035,
                        "src": "20036:22:23",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6004,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "20036:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20035:24:23"
                  },
                  "returnParameters": {
                    "id": 6009,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6008,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6035,
                        "src": "20082:4:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6007,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "20082:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20081:6:23"
                  },
                  "scope": 6710,
                  "src": "20016:248:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 6253,
                    "nodeType": "Block",
                    "src": "20624:5124:23",
                    "statements": [
                      {
                        "id": 6252,
                        "nodeType": "UncheckedBlock",
                        "src": "20634:5108:23",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6045,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6043,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6038,
                                "src": "20728:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 6044,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "20733:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "20728:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6049,
                            "nodeType": "IfStatement",
                            "src": "20724:53:23",
                            "trueBody": {
                              "id": 6048,
                              "nodeType": "Block",
                              "src": "20736:41:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6046,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6038,
                                    "src": "20761:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 6042,
                                  "id": 6047,
                                  "nodeType": "Return",
                                  "src": "20754:8:23"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              6051
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6051,
                                "mutability": "mutable",
                                "name": "aa",
                                "nameLocation": "21712:2:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 6252,
                                "src": "21704:10:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6050,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21704:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6053,
                            "initialValue": {
                              "id": 6052,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6038,
                              "src": "21717:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "21704:14:23"
                          },
                          {
                            "assignments": [
                              6055
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6055,
                                "mutability": "mutable",
                                "name": "xn",
                                "nameLocation": "21740:2:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 6252,
                                "src": "21732:10:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6054,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21732:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6057,
                            "initialValue": {
                              "hexValue": "31",
                              "id": 6056,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21745:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "21732:14:23"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6058,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6051,
                                "src": "21765:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                                    },
                                    "id": 6061,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 6059,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21772:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "313238",
                                      "id": 6060,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21777:3:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "21772:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                                    }
                                  }
                                ],
                                "id": 6062,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21771:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                  "typeString": "int_const 3402...(31 digits omitted)...1456"
                                }
                              },
                              "src": "21765:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6073,
                            "nodeType": "IfStatement",
                            "src": "21761:92:23",
                            "trueBody": {
                              "id": 6072,
                              "nodeType": "Block",
                              "src": "21783:70:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6064,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6051,
                                      "src": "21801:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 6065,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21808:3:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "21801:10:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6067,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21801:10:23"
                                },
                                {
                                  "expression": {
                                    "id": 6070,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6068,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "21829:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 6069,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21836:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "21829:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6071,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21829:9:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6079,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6074,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6051,
                                "src": "21870:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    },
                                    "id": 6077,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 6075,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21877:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3634",
                                      "id": 6076,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21882:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "21877:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    }
                                  }
                                ],
                                "id": 6078,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21876:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                  "typeString": "int_const 18446744073709551616"
                                }
                              },
                              "src": "21870:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6089,
                            "nodeType": "IfStatement",
                            "src": "21866:90:23",
                            "trueBody": {
                              "id": 6088,
                              "nodeType": "Block",
                              "src": "21887:69:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6082,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6080,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6051,
                                      "src": "21905:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 6081,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21912:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "21905:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6083,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21905:9:23"
                                },
                                {
                                  "expression": {
                                    "id": 6086,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6084,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "21932:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 6085,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21939:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "21932:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6087,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21932:9:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6090,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6051,
                                "src": "21973:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_4294967296_by_1",
                                      "typeString": "int_const 4294967296"
                                    },
                                    "id": 6093,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 6091,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21980:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3332",
                                      "id": 6092,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21985:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "21980:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4294967296_by_1",
                                      "typeString": "int_const 4294967296"
                                    }
                                  }
                                ],
                                "id": 6094,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21979:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4294967296_by_1",
                                  "typeString": "int_const 4294967296"
                                }
                              },
                              "src": "21973:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6105,
                            "nodeType": "IfStatement",
                            "src": "21969:90:23",
                            "trueBody": {
                              "id": 6104,
                              "nodeType": "Block",
                              "src": "21990:69:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6098,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6096,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6051,
                                      "src": "22008:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 6097,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22015:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "22008:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6099,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22008:9:23"
                                },
                                {
                                  "expression": {
                                    "id": 6102,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6100,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "22035:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 6101,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22042:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "22035:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6103,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22035:9:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6111,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6106,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6051,
                                "src": "22076:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_65536_by_1",
                                      "typeString": "int_const 65536"
                                    },
                                    "id": 6109,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 6107,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22083:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3136",
                                      "id": 6108,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22088:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "22083:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_65536_by_1",
                                      "typeString": "int_const 65536"
                                    }
                                  }
                                ],
                                "id": 6110,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22082:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_65536_by_1",
                                  "typeString": "int_const 65536"
                                }
                              },
                              "src": "22076:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6121,
                            "nodeType": "IfStatement",
                            "src": "22072:89:23",
                            "trueBody": {
                              "id": 6120,
                              "nodeType": "Block",
                              "src": "22093:68:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6114,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6112,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6051,
                                      "src": "22111:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 6113,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22118:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "22111:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6115,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22111:9:23"
                                },
                                {
                                  "expression": {
                                    "id": 6118,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6116,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "22138:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 6117,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22145:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "22138:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6119,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22138:8:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6127,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6122,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6051,
                                "src": "22178:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "id": 6125,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 6123,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22185:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "38",
                                      "id": 6124,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22190:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "22185:6:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    }
                                  }
                                ],
                                "id": 6126,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22184:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                }
                              },
                              "src": "22178:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6137,
                            "nodeType": "IfStatement",
                            "src": "22174:87:23",
                            "trueBody": {
                              "id": 6136,
                              "nodeType": "Block",
                              "src": "22194:67:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6130,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6128,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6051,
                                      "src": "22212:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 6129,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22219:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "22212:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6131,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22212:8:23"
                                },
                                {
                                  "expression": {
                                    "id": 6134,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6132,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "22238:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 6133,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22245:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "22238:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6135,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22238:8:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6143,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6138,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6051,
                                "src": "22278:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "id": 6141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 6139,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22285:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "34",
                                      "id": 6140,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22290:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "22285:6:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    }
                                  }
                                ],
                                "id": 6142,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22284:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              },
                              "src": "22278:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6153,
                            "nodeType": "IfStatement",
                            "src": "22274:87:23",
                            "trueBody": {
                              "id": 6152,
                              "nodeType": "Block",
                              "src": "22294:67:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6146,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6144,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6051,
                                      "src": "22312:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 6145,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22319:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "22312:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6147,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22312:8:23"
                                },
                                {
                                  "expression": {
                                    "id": 6150,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6148,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "22338:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 6149,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22345:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "22338:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6151,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22338:8:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6154,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6051,
                                "src": "22378:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_4_by_1",
                                      "typeString": "int_const 4"
                                    },
                                    "id": 6157,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 6155,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22385:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "32",
                                      "id": 6156,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22390:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "22385:6:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4_by_1",
                                      "typeString": "int_const 4"
                                    }
                                  }
                                ],
                                "id": 6158,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22384:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                }
                              },
                              "src": "22378:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6165,
                            "nodeType": "IfStatement",
                            "src": "22374:61:23",
                            "trueBody": {
                              "id": 6164,
                              "nodeType": "Block",
                              "src": "22394:41:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6162,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6160,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "22412:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 6161,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22419:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "22412:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6163,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22412:8:23"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "id": 6173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6166,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "22855:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6169,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "33",
                                        "id": 6167,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "22861:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_3_by_1",
                                          "typeString": "int_const 3"
                                        },
                                        "value": "3"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "id": 6168,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "22865:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22861:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6170,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "22860:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6171,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "22872:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "22860:13:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "22855:18:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6174,
                            "nodeType": "ExpressionStatement",
                            "src": "22855:18:23"
                          },
                          {
                            "expression": {
                              "id": 6184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6175,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "24760:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6183,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6180,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6176,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "24766:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6179,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6177,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6038,
                                          "src": "24771:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 6178,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6055,
                                          "src": "24775:2:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24771:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "24766:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6181,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "24765:13:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6182,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24782:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "24765:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "24760:23:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6185,
                            "nodeType": "ExpressionStatement",
                            "src": "24760:23:23"
                          },
                          {
                            "expression": {
                              "id": 6195,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6186,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "24869:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6194,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6191,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6187,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "24875:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6190,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6188,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6038,
                                          "src": "24880:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 6189,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6055,
                                          "src": "24884:2:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24880:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "24875:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6192,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "24874:13:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6193,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24891:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "24874:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "24869:23:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6196,
                            "nodeType": "ExpressionStatement",
                            "src": "24869:23:23"
                          },
                          {
                            "expression": {
                              "id": 6206,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6197,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "24980:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6205,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6202,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6198,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "24986:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6201,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6199,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6038,
                                          "src": "24991:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 6200,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6055,
                                          "src": "24995:2:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24991:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "24986:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6203,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "24985:13:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6204,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25002:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "24985:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "24980:23:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6207,
                            "nodeType": "ExpressionStatement",
                            "src": "24980:23:23"
                          },
                          {
                            "expression": {
                              "id": 6217,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6208,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "25089:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6216,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6213,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6209,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "25095:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6212,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6210,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6038,
                                          "src": "25100:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 6211,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6055,
                                          "src": "25104:2:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25100:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25095:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6214,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25094:13:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6215,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25111:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "25094:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25089:23:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6218,
                            "nodeType": "ExpressionStatement",
                            "src": "25089:23:23"
                          },
                          {
                            "expression": {
                              "id": 6228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6219,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "25199:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6227,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6224,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6220,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "25205:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6223,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6221,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6038,
                                          "src": "25210:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 6222,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6055,
                                          "src": "25214:2:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25210:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25205:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6225,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25204:13:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6226,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25221:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "25204:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25199:23:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6229,
                            "nodeType": "ExpressionStatement",
                            "src": "25199:23:23"
                          },
                          {
                            "expression": {
                              "id": 6239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6230,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "25309:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6235,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6231,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "25315:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6234,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6232,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6038,
                                          "src": "25320:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 6233,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6055,
                                          "src": "25324:2:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25320:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25315:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6236,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25314:13:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6237,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25331:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "25314:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25309:23:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6240,
                            "nodeType": "ExpressionStatement",
                            "src": "25309:23:23"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6250,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6241,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6055,
                                "src": "25698:2:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6248,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6244,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6055,
                                      "src": "25719:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6247,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6245,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6038,
                                        "src": "25724:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "/",
                                      "rightExpression": {
                                        "id": 6246,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6055,
                                        "src": "25728:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25724:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "25719:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6242,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8475,
                                    "src": "25703:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 6243,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "25712:6:23",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8474,
                                  "src": "25703:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 6249,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25703:28:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25698:33:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6042,
                            "id": 6251,
                            "nodeType": "Return",
                            "src": "25691:40:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6036,
                    "nodeType": "StructuredDocumentation",
                    "src": "20270:292:23",
                    "text": " @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n using integer operations."
                  },
                  "id": 6254,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "20576:4:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6039,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6038,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "20589:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6254,
                        "src": "20581:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6037,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20581:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20580:11:23"
                  },
                  "returnParameters": {
                    "id": 6042,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6041,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6254,
                        "src": "20615:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6040,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20615:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20614:9:23"
                  },
                  "scope": 6710,
                  "src": "20567:5181:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6287,
                    "nodeType": "Block",
                    "src": "25921:171:23",
                    "statements": [
                      {
                        "id": 6286,
                        "nodeType": "UncheckedBlock",
                        "src": "25931:155:23",
                        "statements": [
                          {
                            "assignments": [
                              6266
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6266,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "25963:6:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 6286,
                                "src": "25955:14:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6265,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "25955:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6270,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 6268,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6257,
                                  "src": "25977:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6267,
                                "name": "sqrt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  6254,
                                  6288
                                ],
                                "referencedDeclaration": 6254,
                                "src": "25972:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6269,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25972:7:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "25955:24:23"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6284,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6271,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6266,
                                "src": "26000:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 6282,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 6275,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6260,
                                          "src": "26042:8:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 6274,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6709,
                                        "src": "26025:16:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$5101_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 6276,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "26025:26:23",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6281,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6279,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6277,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6266,
                                          "src": "26055:6:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "id": 6278,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6266,
                                          "src": "26064:6:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26055:15:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 6280,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6257,
                                        "src": "26073:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "26055:19:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "26025:49:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6272,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8475,
                                    "src": "26009:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 6273,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "26018:6:23",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8474,
                                  "src": "26009:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 6283,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26009:66:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "26000:75:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6264,
                            "id": 6285,
                            "nodeType": "Return",
                            "src": "25993:82:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6255,
                    "nodeType": "StructuredDocumentation",
                    "src": "25754:86:23",
                    "text": " @dev Calculates sqrt(a), following the selected rounding direction."
                  },
                  "id": 6288,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "25854:4:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6261,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6257,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "25867:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6288,
                        "src": "25859:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6256,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25859:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6260,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "25879:8:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6288,
                        "src": "25870:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$5101",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 6259,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 6258,
                            "name": "Rounding",
                            "nameLocations": [
                              "25870:8:23"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5101,
                            "src": "25870:8:23"
                          },
                          "referencedDeclaration": 5101,
                          "src": "25870:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$5101",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25858:30:23"
                  },
                  "returnParameters": {
                    "id": 6264,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6263,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6288,
                        "src": "25912:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6262,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25912:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25911:9:23"
                  },
                  "scope": 6710,
                  "src": "25845:247:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6378,
                    "nodeType": "Block",
                    "src": "26281:2334:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 6305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6296,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6294,
                            "src": "26363:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6304,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6301,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6299,
                                    "name": "x",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6291,
                                    "src": "26383:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                                    "id": 6300,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26387:34:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1455"
                                    },
                                    "value": "0xffffffffffffffffffffffffffffffff"
                                  },
                                  "src": "26383:38:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6297,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "26367:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6298,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26376:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "26367:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6302,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26367:55:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "37",
                              "id": 6303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26426:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_7_by_1",
                                "typeString": "int_const 7"
                              },
                              "value": "7"
                            },
                            "src": "26367:60:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26363:64:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6306,
                        "nodeType": "ExpressionStatement",
                        "src": "26363:64:23"
                      },
                      {
                        "expression": {
                          "id": 6319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6307,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6294,
                            "src": "26503:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6318,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6315,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6312,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6310,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6291,
                                          "src": "26525:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6311,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6294,
                                          "src": "26530:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26525:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6313,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26524:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666666666666666666666666666",
                                    "id": 6314,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26535:18:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551615_by_1",
                                      "typeString": "int_const 18446744073709551615"
                                    },
                                    "value": "0xffffffffffffffff"
                                  },
                                  "src": "26524:29:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6308,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "26508:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26517:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "26508:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6316,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26508:46:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "36",
                              "id": 6317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26558:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6_by_1",
                                "typeString": "int_const 6"
                              },
                              "value": "6"
                            },
                            "src": "26508:51:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26503:56:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6320,
                        "nodeType": "ExpressionStatement",
                        "src": "26503:56:23"
                      },
                      {
                        "expression": {
                          "id": 6333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6321,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6294,
                            "src": "26634:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6329,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6326,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6324,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6291,
                                          "src": "26656:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6325,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6294,
                                          "src": "26661:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26656:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6327,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26655:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666",
                                    "id": 6328,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26666:10:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4294967295_by_1",
                                      "typeString": "int_const 4294967295"
                                    },
                                    "value": "0xffffffff"
                                  },
                                  "src": "26655:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6322,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "26639:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6323,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26648:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "26639:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26639:38:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "35",
                              "id": 6331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26681:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_5_by_1",
                                "typeString": "int_const 5"
                              },
                              "value": "5"
                            },
                            "src": "26639:43:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26634:48:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6334,
                        "nodeType": "ExpressionStatement",
                        "src": "26634:48:23"
                      },
                      {
                        "expression": {
                          "id": 6347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6335,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6294,
                            "src": "26757:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6346,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6343,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6340,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6338,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6291,
                                          "src": "26779:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6339,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6294,
                                          "src": "26784:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26779:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6341,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26778:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666",
                                    "id": 6342,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26789:6:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_65535_by_1",
                                      "typeString": "int_const 65535"
                                    },
                                    "value": "0xffff"
                                  },
                                  "src": "26778:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6336,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "26762:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6337,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26771:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "26762:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26762:34:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "34",
                              "id": 6345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26800:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "4"
                            },
                            "src": "26762:39:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26757:44:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6348,
                        "nodeType": "ExpressionStatement",
                        "src": "26757:44:23"
                      },
                      {
                        "expression": {
                          "id": 6361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6349,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6294,
                            "src": "26874:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6357,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6354,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6352,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6291,
                                          "src": "26896:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6353,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6294,
                                          "src": "26901:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26896:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6355,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26895:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666",
                                    "id": 6356,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26906:4:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_255_by_1",
                                      "typeString": "int_const 255"
                                    },
                                    "value": "0xff"
                                  },
                                  "src": "26895:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6350,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "26879:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6351,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26888:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "26879:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26879:32:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "33",
                              "id": 6359,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26915:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3_by_1",
                                "typeString": "int_const 3"
                              },
                              "value": "3"
                            },
                            "src": "26879:37:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26874:42:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6362,
                        "nodeType": "ExpressionStatement",
                        "src": "26874:42:23"
                      },
                      {
                        "expression": {
                          "id": 6375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6363,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6294,
                            "src": "26988:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6371,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6368,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6366,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6291,
                                          "src": "27010:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6367,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6294,
                                          "src": "27015:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "27010:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6369,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "27009:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866",
                                    "id": 6370,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27020:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_15_by_1",
                                      "typeString": "int_const 15"
                                    },
                                    "value": "0xf"
                                  },
                                  "src": "27009:14:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6364,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "26993:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6365,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "27002:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "26993:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26993:31:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 6373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27028:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "26993:36:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26988:41:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6376,
                        "nodeType": "ExpressionStatement",
                        "src": "26988:41:23"
                      },
                      {
                        "AST": {
                          "nativeSrc": "28490:119:23",
                          "nodeType": "YulBlock",
                          "src": "28490:119:23",
                          "statements": [
                            {
                              "nativeSrc": "28504:95:23",
                              "nodeType": "YulAssignment",
                              "src": "28504:95:23",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "r",
                                    "nativeSrc": "28512:1:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "28512:1:23"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "r",
                                            "nativeSrc": "28524:1:23",
                                            "nodeType": "YulIdentifier",
                                            "src": "28524:1:23"
                                          },
                                          {
                                            "name": "x",
                                            "nativeSrc": "28527:1:23",
                                            "nodeType": "YulIdentifier",
                                            "src": "28527:1:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shr",
                                          "nativeSrc": "28520:3:23",
                                          "nodeType": "YulIdentifier",
                                          "src": "28520:3:23"
                                        },
                                        "nativeSrc": "28520:9:23",
                                        "nodeType": "YulFunctionCall",
                                        "src": "28520:9:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "28531:66:23",
                                        "nodeType": "YulLiteral",
                                        "src": "28531:66:23",
                                        "type": "",
                                        "value": "0x0000010102020202030303030303030300000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "byte",
                                      "nativeSrc": "28515:4:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "28515:4:23"
                                    },
                                    "nativeSrc": "28515:83:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "28515:83:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nativeSrc": "28509:2:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "28509:2:23"
                                },
                                "nativeSrc": "28509:90:23",
                                "nodeType": "YulFunctionCall",
                                "src": "28509:90:23"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nativeSrc": "28504:1:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "28504:1:23"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 6294,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28504:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6294,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28512:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6294,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28524:1:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6291,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28527:1:23",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 6377,
                        "nodeType": "InlineAssembly",
                        "src": "28465:144:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6289,
                    "nodeType": "StructuredDocumentation",
                    "src": "26098:119:23",
                    "text": " @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."
                  },
                  "id": 6379,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "26231:4:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6292,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6291,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "26244:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6379,
                        "src": "26236:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6290,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26236:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26235:11:23"
                  },
                  "returnParameters": {
                    "id": 6295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6294,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "26278:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6379,
                        "src": "26270:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6293,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26270:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26269:11:23"
                  },
                  "scope": 6710,
                  "src": "26222:2393:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6412,
                    "nodeType": "Block",
                    "src": "28848:175:23",
                    "statements": [
                      {
                        "id": 6411,
                        "nodeType": "UncheckedBlock",
                        "src": "28858:159:23",
                        "statements": [
                          {
                            "assignments": [
                              6391
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6391,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "28890:6:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 6411,
                                "src": "28882:14:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6390,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "28882:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6395,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 6393,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6382,
                                  "src": "28904:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6392,
                                "name": "log2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  6379,
                                  6413
                                ],
                                "referencedDeclaration": 6379,
                                "src": "28899:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6394,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "28899:11:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "28882:28:23"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6409,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6396,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6391,
                                "src": "28931:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 6407,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 6400,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6385,
                                          "src": "28973:8:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 6399,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6709,
                                        "src": "28956:16:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$5101_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 6401,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "28956:26:23",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6406,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6404,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 6402,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "28986:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "id": 6403,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6391,
                                          "src": "28991:6:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "28986:11:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 6405,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6382,
                                        "src": "29000:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "28986:19:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "28956:49:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6397,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8475,
                                    "src": "28940:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 6398,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "28949:6:23",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8474,
                                  "src": "28940:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 6408,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28940:66:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "28931:75:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6389,
                            "id": 6410,
                            "nodeType": "Return",
                            "src": "28924:82:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6380,
                    "nodeType": "StructuredDocumentation",
                    "src": "28621:142:23",
                    "text": " @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 6413,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "28777:4:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6386,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6382,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "28790:5:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6413,
                        "src": "28782:13:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6381,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28782:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6385,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "28806:8:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6413,
                        "src": "28797:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$5101",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 6384,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 6383,
                            "name": "Rounding",
                            "nameLocations": [
                              "28797:8:23"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5101,
                            "src": "28797:8:23"
                          },
                          "referencedDeclaration": 5101,
                          "src": "28797:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$5101",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28781:34:23"
                  },
                  "returnParameters": {
                    "id": 6389,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6388,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6413,
                        "src": "28839:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6387,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28839:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28838:9:23"
                  },
                  "scope": 6710,
                  "src": "28768:255:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6541,
                    "nodeType": "Block",
                    "src": "29216:854:23",
                    "statements": [
                      {
                        "assignments": [
                          6422
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6422,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "29234:6:23",
                            "nodeType": "VariableDeclaration",
                            "scope": 6541,
                            "src": "29226:14:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6421,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29226:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6424,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 6423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29243:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29226:18:23"
                      },
                      {
                        "id": 6538,
                        "nodeType": "UncheckedBlock",
                        "src": "29254:787:23",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6425,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6416,
                                "src": "29282:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(57 digits omitted)...0000"
                                },
                                "id": 6428,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 6426,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29291:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 6427,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29297:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "29291:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(57 digits omitted)...0000"
                                }
                              },
                              "src": "29282:17:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6441,
                            "nodeType": "IfStatement",
                            "src": "29278:103:23",
                            "trueBody": {
                              "id": 6440,
                              "nodeType": "Block",
                              "src": "29301:80:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6434,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6430,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6416,
                                      "src": "29319:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(57 digits omitted)...0000"
                                      },
                                      "id": 6433,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 6431,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29328:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3634",
                                        "id": 6432,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29334:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_64_by_1",
                                          "typeString": "int_const 64"
                                        },
                                        "value": "64"
                                      },
                                      "src": "29328:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(57 digits omitted)...0000"
                                      }
                                    },
                                    "src": "29319:17:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6435,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29319:17:23"
                                },
                                {
                                  "expression": {
                                    "id": 6438,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6436,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6422,
                                      "src": "29354:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 6437,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29364:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "29354:12:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6439,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29354:12:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6446,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6442,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6416,
                                "src": "29398:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(25 digits omitted)...0000"
                                },
                                "id": 6445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 6443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29407:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 6444,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29413:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "29407:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(25 digits omitted)...0000"
                                }
                              },
                              "src": "29398:17:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6458,
                            "nodeType": "IfStatement",
                            "src": "29394:103:23",
                            "trueBody": {
                              "id": 6457,
                              "nodeType": "Block",
                              "src": "29417:80:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6451,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6447,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6416,
                                      "src": "29435:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(25 digits omitted)...0000"
                                      },
                                      "id": 6450,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 6448,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29444:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3332",
                                        "id": 6449,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29450:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "src": "29444:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(25 digits omitted)...0000"
                                      }
                                    },
                                    "src": "29435:17:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6452,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29435:17:23"
                                },
                                {
                                  "expression": {
                                    "id": 6455,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6453,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6422,
                                      "src": "29470:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 6454,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29480:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "29470:12:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6456,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29470:12:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6463,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6459,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6416,
                                "src": "29514:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                },
                                "id": 6462,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 6460,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29523:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 6461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29529:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "29523:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                }
                              },
                              "src": "29514:17:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6475,
                            "nodeType": "IfStatement",
                            "src": "29510:103:23",
                            "trueBody": {
                              "id": 6474,
                              "nodeType": "Block",
                              "src": "29533:80:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6468,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6464,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6416,
                                      "src": "29551:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      },
                                      "id": 6467,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 6465,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29560:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3136",
                                        "id": 6466,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29566:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_16_by_1",
                                          "typeString": "int_const 16"
                                        },
                                        "value": "16"
                                      },
                                      "src": "29560:8:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      }
                                    },
                                    "src": "29551:17:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6469,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29551:17:23"
                                },
                                {
                                  "expression": {
                                    "id": 6472,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6470,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6422,
                                      "src": "29586:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 6471,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29596:2:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "29586:12:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6473,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29586:12:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6476,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6416,
                                "src": "29630:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                },
                                "id": 6479,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 6477,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29639:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 6478,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29645:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "29639:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                }
                              },
                              "src": "29630:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6492,
                            "nodeType": "IfStatement",
                            "src": "29626:100:23",
                            "trueBody": {
                              "id": 6491,
                              "nodeType": "Block",
                              "src": "29648:78:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6485,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6481,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6416,
                                      "src": "29666:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      },
                                      "id": 6484,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 6482,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29675:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "38",
                                        "id": 6483,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29681:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "8"
                                      },
                                      "src": "29675:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    },
                                    "src": "29666:16:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6486,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29666:16:23"
                                },
                                {
                                  "expression": {
                                    "id": 6489,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6487,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6422,
                                      "src": "29700:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 6488,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29710:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "29700:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6490,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29700:11:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6493,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6416,
                                "src": "29743:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "id": 6496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 6494,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29752:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 6495,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29758:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "29752:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              },
                              "src": "29743:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6509,
                            "nodeType": "IfStatement",
                            "src": "29739:100:23",
                            "trueBody": {
                              "id": 6508,
                              "nodeType": "Block",
                              "src": "29761:78:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6502,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6498,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6416,
                                      "src": "29779:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      },
                                      "id": 6501,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 6499,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29788:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "34",
                                        "id": 6500,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29794:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "29788:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      }
                                    },
                                    "src": "29779:16:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6503,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29779:16:23"
                                },
                                {
                                  "expression": {
                                    "id": 6506,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6504,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6422,
                                      "src": "29813:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 6505,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29823:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "29813:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6507,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29813:11:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6514,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6510,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6416,
                                "src": "29856:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                },
                                "id": 6513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 6511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29865:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 6512,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29871:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "29865:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                }
                              },
                              "src": "29856:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6526,
                            "nodeType": "IfStatement",
                            "src": "29852:100:23",
                            "trueBody": {
                              "id": 6525,
                              "nodeType": "Block",
                              "src": "29874:78:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6519,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6515,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6416,
                                      "src": "29892:5:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      },
                                      "id": 6518,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 6516,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29901:2:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "32",
                                        "id": 6517,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29907:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_2_by_1",
                                          "typeString": "int_const 2"
                                        },
                                        "value": "2"
                                      },
                                      "src": "29901:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      }
                                    },
                                    "src": "29892:16:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6520,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29892:16:23"
                                },
                                {
                                  "expression": {
                                    "id": 6523,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6521,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6422,
                                      "src": "29926:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 6522,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29936:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "29926:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6524,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29926:11:23"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6531,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6527,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6416,
                                "src": "29969:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                },
                                "id": 6530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 6528,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29978:2:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 6529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29984:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "29978:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                }
                              },
                              "src": "29969:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6537,
                            "nodeType": "IfStatement",
                            "src": "29965:66:23",
                            "trueBody": {
                              "id": 6536,
                              "nodeType": "Block",
                              "src": "29987:44:23",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 6534,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6532,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6422,
                                      "src": "30005:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 6533,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "30015:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "30005:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6535,
                                  "nodeType": "ExpressionStatement",
                                  "src": "30005:11:23"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 6539,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6422,
                          "src": "30057:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6420,
                        "id": 6540,
                        "nodeType": "Return",
                        "src": "30050:13:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6414,
                    "nodeType": "StructuredDocumentation",
                    "src": "29029:120:23",
                    "text": " @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."
                  },
                  "id": 6542,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "29163:5:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6417,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6416,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "29177:5:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6542,
                        "src": "29169:13:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6415,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29169:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29168:15:23"
                  },
                  "returnParameters": {
                    "id": 6420,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6419,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6542,
                        "src": "29207:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29207:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29206:9:23"
                  },
                  "scope": 6710,
                  "src": "29154:916:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6575,
                    "nodeType": "Block",
                    "src": "30305:177:23",
                    "statements": [
                      {
                        "id": 6574,
                        "nodeType": "UncheckedBlock",
                        "src": "30315:161:23",
                        "statements": [
                          {
                            "assignments": [
                              6554
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6554,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "30347:6:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 6574,
                                "src": "30339:14:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6553,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "30339:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6558,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 6556,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6545,
                                  "src": "30362:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6555,
                                "name": "log10",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  6542,
                                  6576
                                ],
                                "referencedDeclaration": 6542,
                                "src": "30356:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30356:12:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "30339:29:23"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6559,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6554,
                                "src": "30389:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 6570,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 6563,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6548,
                                          "src": "30431:8:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 6562,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6709,
                                        "src": "30414:16:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$5101_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 6564,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "30414:26:23",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6569,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6567,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "3130",
                                          "id": 6565,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "30444:2:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_10_by_1",
                                            "typeString": "int_const 10"
                                          },
                                          "value": "10"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "**",
                                        "rightExpression": {
                                          "id": 6566,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6554,
                                          "src": "30450:6:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "30444:12:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 6568,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6545,
                                        "src": "30459:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "30444:20:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "30414:50:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6560,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8475,
                                    "src": "30398:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 6561,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "30407:6:23",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8474,
                                  "src": "30398:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 6571,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30398:67:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "30389:76:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6552,
                            "id": 6573,
                            "nodeType": "Return",
                            "src": "30382:83:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6543,
                    "nodeType": "StructuredDocumentation",
                    "src": "30076:143:23",
                    "text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 6576,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "30233:5:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6549,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6545,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "30247:5:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6576,
                        "src": "30239:13:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6544,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30239:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6548,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "30263:8:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6576,
                        "src": "30254:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$5101",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 6547,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 6546,
                            "name": "Rounding",
                            "nameLocations": [
                              "30254:8:23"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5101,
                            "src": "30254:8:23"
                          },
                          "referencedDeclaration": 5101,
                          "src": "30254:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$5101",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30238:34:23"
                  },
                  "returnParameters": {
                    "id": 6552,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6551,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6576,
                        "src": "30296:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6550,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30296:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30295:9:23"
                  },
                  "scope": 6710,
                  "src": "30224:258:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6652,
                    "nodeType": "Block",
                    "src": "30800:675:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 6593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6584,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6582,
                            "src": "30882:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6589,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6587,
                                    "name": "x",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6579,
                                    "src": "30902:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                                    "id": 6588,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30906:34:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1455"
                                    },
                                    "value": "0xffffffffffffffffffffffffffffffff"
                                  },
                                  "src": "30902:38:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6585,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "30886:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6586,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "30895:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "30886:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30886:55:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "37",
                              "id": 6591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "30945:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_7_by_1",
                                "typeString": "int_const 7"
                              },
                              "value": "7"
                            },
                            "src": "30886:60:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30882:64:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6594,
                        "nodeType": "ExpressionStatement",
                        "src": "30882:64:23"
                      },
                      {
                        "expression": {
                          "id": 6607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6595,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6582,
                            "src": "31022:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6606,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6603,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6600,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6598,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6579,
                                          "src": "31044:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6599,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6582,
                                          "src": "31049:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31044:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6601,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31043:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666666666666666666666666666",
                                    "id": 6602,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31054:18:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551615_by_1",
                                      "typeString": "int_const 18446744073709551615"
                                    },
                                    "value": "0xffffffffffffffff"
                                  },
                                  "src": "31043:29:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6596,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "31027:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6597,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "31036:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "31027:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6604,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31027:46:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "36",
                              "id": 6605,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31077:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6_by_1",
                                "typeString": "int_const 6"
                              },
                              "value": "6"
                            },
                            "src": "31027:51:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31022:56:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6608,
                        "nodeType": "ExpressionStatement",
                        "src": "31022:56:23"
                      },
                      {
                        "expression": {
                          "id": 6621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6609,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6582,
                            "src": "31153:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6617,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6614,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6612,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6579,
                                          "src": "31175:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6613,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6582,
                                          "src": "31180:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31175:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6615,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31174:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666",
                                    "id": 6616,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31185:10:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4294967295_by_1",
                                      "typeString": "int_const 4294967295"
                                    },
                                    "value": "0xffffffff"
                                  },
                                  "src": "31174:21:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6610,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "31158:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6611,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "31167:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "31158:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31158:38:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "35",
                              "id": 6619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31200:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_5_by_1",
                                "typeString": "int_const 5"
                              },
                              "value": "5"
                            },
                            "src": "31158:43:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31153:48:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6622,
                        "nodeType": "ExpressionStatement",
                        "src": "31153:48:23"
                      },
                      {
                        "expression": {
                          "id": 6635,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6623,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6582,
                            "src": "31276:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6631,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6628,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6626,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6579,
                                          "src": "31298:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 6627,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6582,
                                          "src": "31303:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31298:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 6629,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31297:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666",
                                    "id": 6630,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31308:6:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_65535_by_1",
                                      "typeString": "int_const 65535"
                                    },
                                    "value": "0xffff"
                                  },
                                  "src": "31297:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 6624,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8475,
                                  "src": "31281:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 6625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "31290:6:23",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8474,
                                "src": "31281:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31281:34:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "34",
                              "id": 6633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31319:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "4"
                            },
                            "src": "31281:39:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31276:44:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6636,
                        "nodeType": "ExpressionStatement",
                        "src": "31276:44:23"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6639,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6637,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6582,
                                  "src": "31426:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "33",
                                  "id": 6638,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "31431:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "src": "31426:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 6640,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "31425:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "|",
                          "rightExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6645,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6643,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6579,
                                        "src": "31453:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "id": 6644,
                                        "name": "r",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6582,
                                        "src": "31458:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "31453:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6646,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "31452:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30786666",
                                  "id": 6647,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "31463:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_255_by_1",
                                    "typeString": "int_const 255"
                                  },
                                  "value": "0xff"
                                },
                                "src": "31452:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "expression": {
                                "id": 6641,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8475,
                                "src": "31436:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 6642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "31445:6:23",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8474,
                              "src": "31436:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 6649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31436:32:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31425:43:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6583,
                        "id": 6651,
                        "nodeType": "Return",
                        "src": "31418:50:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6577,
                    "nodeType": "StructuredDocumentation",
                    "src": "30488:246:23",
                    "text": " @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."
                  },
                  "id": 6653,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "30748:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6580,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6579,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "30763:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6653,
                        "src": "30755:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6578,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30755:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30754:11:23"
                  },
                  "returnParameters": {
                    "id": 6583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6582,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "30797:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6653,
                        "src": "30789:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6581,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30789:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30788:11:23"
                  },
                  "scope": 6710,
                  "src": "30739:736:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6689,
                    "nodeType": "Block",
                    "src": "31712:184:23",
                    "statements": [
                      {
                        "id": 6688,
                        "nodeType": "UncheckedBlock",
                        "src": "31722:168:23",
                        "statements": [
                          {
                            "assignments": [
                              6665
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6665,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "31754:6:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 6688,
                                "src": "31746:14:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6664,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "31746:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6669,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 6667,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6656,
                                  "src": "31770:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6666,
                                "name": "log256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  6653,
                                  6690
                                ],
                                "referencedDeclaration": 6653,
                                "src": "31763:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6668,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31763:13:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "31746:30:23"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6686,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6670,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6665,
                                "src": "31797:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 6684,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 6674,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6659,
                                          "src": "31839:8:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$5101",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 6673,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6709,
                                        "src": "31822:16:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$5101_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 6675,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "31822:26:23",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6683,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6681,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 6676,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "31852:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 6679,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "id": 6677,
                                                "name": "result",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6665,
                                                "src": "31858:6:23",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "<<",
                                              "rightExpression": {
                                                "hexValue": "33",
                                                "id": 6678,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "31868:1:23",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_3_by_1",
                                                  "typeString": "int_const 3"
                                                },
                                                "value": "3"
                                              },
                                              "src": "31858:11:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 6680,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "31857:13:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31852:18:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 6682,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6656,
                                        "src": "31873:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "31852:26:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "31822:56:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6671,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8475,
                                    "src": "31806:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 6672,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "31815:6:23",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8474,
                                  "src": "31806:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 6685,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31806:73:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "31797:82:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6663,
                            "id": 6687,
                            "nodeType": "Return",
                            "src": "31790:89:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6654,
                    "nodeType": "StructuredDocumentation",
                    "src": "31481:144:23",
                    "text": " @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 6690,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "31639:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6660,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6656,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "31654:5:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6690,
                        "src": "31646:13:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6655,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31646:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6659,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "31670:8:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6690,
                        "src": "31661:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$5101",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 6658,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 6657,
                            "name": "Rounding",
                            "nameLocations": [
                              "31661:8:23"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5101,
                            "src": "31661:8:23"
                          },
                          "referencedDeclaration": 5101,
                          "src": "31661:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$5101",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31645:34:23"
                  },
                  "returnParameters": {
                    "id": 6663,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6662,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6690,
                        "src": "31703:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6661,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31703:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31702:9:23"
                  },
                  "scope": 6710,
                  "src": "31630:266:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6708,
                    "nodeType": "Block",
                    "src": "32094:48:23",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 6706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 6704,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 6701,
                                  "name": "rounding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6694,
                                  "src": "32117:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Rounding_$5101",
                                    "typeString": "enum Math.Rounding"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Rounding_$5101",
                                    "typeString": "enum Math.Rounding"
                                  }
                                ],
                                "id": 6700,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "32111:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": {
                                  "id": 6699,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "32111:5:23",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 6702,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "32111:15:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "%",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 6703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32129:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "32111:19:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 6705,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "32134:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "32111:24:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6698,
                        "id": 6707,
                        "nodeType": "Return",
                        "src": "32104:31:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6691,
                    "nodeType": "StructuredDocumentation",
                    "src": "31902:113:23",
                    "text": " @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."
                  },
                  "id": 6709,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsignedRoundsUp",
                  "nameLocation": "32029:16:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6694,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "32055:8:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6709,
                        "src": "32046:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$5101",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 6693,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 6692,
                            "name": "Rounding",
                            "nameLocations": [
                              "32046:8:23"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5101,
                            "src": "32046:8:23"
                          },
                          "referencedDeclaration": 5101,
                          "src": "32046:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$5101",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32045:19:23"
                  },
                  "returnParameters": {
                    "id": 6698,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6697,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6709,
                        "src": "32088:4:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6696,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "32088:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32087:6:23"
                  },
                  "scope": 6710,
                  "src": "32020:122:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 6711,
              "src": "281:31863:23",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "103:32042:23"
        },
        "id": 23
      },
      "@openzeppelin/contracts/utils/math/SafeCast.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
          "exportedSymbols": {
            "SafeCast": [
              8475
            ]
          },
          "id": 8476,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6712,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "192:24:24"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "SafeCast",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 6713,
                "nodeType": "StructuredDocumentation",
                "src": "218:550:24",
                "text": " @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."
              },
              "fullyImplemented": true,
              "id": 8475,
              "linearizedBaseContracts": [
                8475
              ],
              "name": "SafeCast",
              "nameLocation": "777:8:24",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 6714,
                    "nodeType": "StructuredDocumentation",
                    "src": "792:68:24",
                    "text": " @dev Value doesn't fit in an uint of `bits` size."
                  },
                  "errorSelector": "6dfcc650",
                  "id": 6720,
                  "name": "SafeCastOverflowedUintDowncast",
                  "nameLocation": "871:30:24",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 6719,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6716,
                        "mutability": "mutable",
                        "name": "bits",
                        "nameLocation": "908:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6720,
                        "src": "902:10:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 6715,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "902:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6718,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "922:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6720,
                        "src": "914:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6717,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "901:27:24"
                  },
                  "src": "865:64:24"
                },
                {
                  "documentation": {
                    "id": 6721,
                    "nodeType": "StructuredDocumentation",
                    "src": "935:75:24",
                    "text": " @dev An int value doesn't fit in an uint of `bits` size."
                  },
                  "errorSelector": "a8ce4432",
                  "id": 6725,
                  "name": "SafeCastOverflowedIntToUint",
                  "nameLocation": "1021:27:24",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 6724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6723,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1056:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6725,
                        "src": "1049:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 6722,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1049:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1048:14:24"
                  },
                  "src": "1015:48:24"
                },
                {
                  "documentation": {
                    "id": 6726,
                    "nodeType": "StructuredDocumentation",
                    "src": "1069:67:24",
                    "text": " @dev Value doesn't fit in an int of `bits` size."
                  },
                  "errorSelector": "327269a7",
                  "id": 6732,
                  "name": "SafeCastOverflowedIntDowncast",
                  "nameLocation": "1147:29:24",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 6731,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6728,
                        "mutability": "mutable",
                        "name": "bits",
                        "nameLocation": "1183:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6732,
                        "src": "1177:10:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 6727,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1177:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6730,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1196:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6732,
                        "src": "1189:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 6729,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1189:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1176:26:24"
                  },
                  "src": "1141:62:24"
                },
                {
                  "documentation": {
                    "id": 6733,
                    "nodeType": "StructuredDocumentation",
                    "src": "1209:75:24",
                    "text": " @dev An uint value doesn't fit in an int of `bits` size."
                  },
                  "errorSelector": "24775e06",
                  "id": 6737,
                  "name": "SafeCastOverflowedUintToInt",
                  "nameLocation": "1295:27:24",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 6736,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6735,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1331:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6737,
                        "src": "1323:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6734,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1323:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1322:15:24"
                  },
                  "src": "1289:49:24"
                },
                {
                  "body": {
                    "id": 6764,
                    "nodeType": "Block",
                    "src": "1695:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6745,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6740,
                            "src": "1709:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6748,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1722:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint248_$",
                                    "typeString": "type(uint248)"
                                  },
                                  "typeName": {
                                    "id": 6747,
                                    "name": "uint248",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1722:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint248_$",
                                    "typeString": "type(uint248)"
                                  }
                                ],
                                "id": 6746,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "1717:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1717:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint248",
                                "typeString": "type(uint248)"
                              }
                            },
                            "id": 6750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "1731:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "1717:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint248",
                              "typeString": "uint248"
                            }
                          },
                          "src": "1709:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6758,
                        "nodeType": "IfStatement",
                        "src": "1705:105:24",
                        "trueBody": {
                          "id": 6757,
                          "nodeType": "Block",
                          "src": "1736:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323438",
                                    "id": 6753,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1788:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    "value": "248"
                                  },
                                  {
                                    "id": 6754,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6740,
                                    "src": "1793:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6752,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "1757:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1757:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6756,
                              "nodeType": "RevertStatement",
                              "src": "1750:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6761,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6740,
                              "src": "1834:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6760,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1826:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint248_$",
                              "typeString": "type(uint248)"
                            },
                            "typeName": {
                              "id": 6759,
                              "name": "uint248",
                              "nodeType": "ElementaryTypeName",
                              "src": "1826:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6762,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1826:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint248",
                            "typeString": "uint248"
                          }
                        },
                        "functionReturnParameters": 6744,
                        "id": 6763,
                        "nodeType": "Return",
                        "src": "1819:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6738,
                    "nodeType": "StructuredDocumentation",
                    "src": "1344:280:24",
                    "text": " @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"
                  },
                  "id": 6765,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint248",
                  "nameLocation": "1638:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6740,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1656:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6765,
                        "src": "1648:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6739,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1648:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1647:15:24"
                  },
                  "returnParameters": {
                    "id": 6744,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6743,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6765,
                        "src": "1686:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint248",
                          "typeString": "uint248"
                        },
                        "typeName": {
                          "id": 6742,
                          "name": "uint248",
                          "nodeType": "ElementaryTypeName",
                          "src": "1686:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint248",
                            "typeString": "uint248"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1685:9:24"
                  },
                  "scope": 8475,
                  "src": "1629:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6792,
                    "nodeType": "Block",
                    "src": "2204:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6779,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6773,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6768,
                            "src": "2218:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6776,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2231:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint240_$",
                                    "typeString": "type(uint240)"
                                  },
                                  "typeName": {
                                    "id": 6775,
                                    "name": "uint240",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2231:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint240_$",
                                    "typeString": "type(uint240)"
                                  }
                                ],
                                "id": 6774,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "2226:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6777,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2226:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint240",
                                "typeString": "type(uint240)"
                              }
                            },
                            "id": 6778,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "2240:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "2226:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint240",
                              "typeString": "uint240"
                            }
                          },
                          "src": "2218:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6786,
                        "nodeType": "IfStatement",
                        "src": "2214:105:24",
                        "trueBody": {
                          "id": 6785,
                          "nodeType": "Block",
                          "src": "2245:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323430",
                                    "id": 6781,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2297:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    "value": "240"
                                  },
                                  {
                                    "id": 6782,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6768,
                                    "src": "2302:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6780,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "2266:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6783,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2266:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6784,
                              "nodeType": "RevertStatement",
                              "src": "2259:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6789,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6768,
                              "src": "2343:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2335:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint240_$",
                              "typeString": "type(uint240)"
                            },
                            "typeName": {
                              "id": 6787,
                              "name": "uint240",
                              "nodeType": "ElementaryTypeName",
                              "src": "2335:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2335:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint240",
                            "typeString": "uint240"
                          }
                        },
                        "functionReturnParameters": 6772,
                        "id": 6791,
                        "nodeType": "Return",
                        "src": "2328:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6766,
                    "nodeType": "StructuredDocumentation",
                    "src": "1853:280:24",
                    "text": " @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"
                  },
                  "id": 6793,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint240",
                  "nameLocation": "2147:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6768,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2165:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6793,
                        "src": "2157:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6767,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2157:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2156:15:24"
                  },
                  "returnParameters": {
                    "id": 6772,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6771,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6793,
                        "src": "2195:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        },
                        "typeName": {
                          "id": 6770,
                          "name": "uint240",
                          "nodeType": "ElementaryTypeName",
                          "src": "2195:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint240",
                            "typeString": "uint240"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2194:9:24"
                  },
                  "scope": 8475,
                  "src": "2138:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6820,
                    "nodeType": "Block",
                    "src": "2713:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6801,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6796,
                            "src": "2727:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6804,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2740:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint232_$",
                                    "typeString": "type(uint232)"
                                  },
                                  "typeName": {
                                    "id": 6803,
                                    "name": "uint232",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2740:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint232_$",
                                    "typeString": "type(uint232)"
                                  }
                                ],
                                "id": 6802,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "2735:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6805,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2735:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint232",
                                "typeString": "type(uint232)"
                              }
                            },
                            "id": 6806,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "2749:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "2735:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint232",
                              "typeString": "uint232"
                            }
                          },
                          "src": "2727:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6814,
                        "nodeType": "IfStatement",
                        "src": "2723:105:24",
                        "trueBody": {
                          "id": 6813,
                          "nodeType": "Block",
                          "src": "2754:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323332",
                                    "id": 6809,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2806:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    "value": "232"
                                  },
                                  {
                                    "id": 6810,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6796,
                                    "src": "2811:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6808,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "2775:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6811,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2775:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6812,
                              "nodeType": "RevertStatement",
                              "src": "2768:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6817,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6796,
                              "src": "2852:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2844:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint232_$",
                              "typeString": "type(uint232)"
                            },
                            "typeName": {
                              "id": 6815,
                              "name": "uint232",
                              "nodeType": "ElementaryTypeName",
                              "src": "2844:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2844:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint232",
                            "typeString": "uint232"
                          }
                        },
                        "functionReturnParameters": 6800,
                        "id": 6819,
                        "nodeType": "Return",
                        "src": "2837:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6794,
                    "nodeType": "StructuredDocumentation",
                    "src": "2362:280:24",
                    "text": " @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"
                  },
                  "id": 6821,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint232",
                  "nameLocation": "2656:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6797,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6796,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2674:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6821,
                        "src": "2666:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6795,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2666:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2665:15:24"
                  },
                  "returnParameters": {
                    "id": 6800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6799,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6821,
                        "src": "2704:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint232",
                          "typeString": "uint232"
                        },
                        "typeName": {
                          "id": 6798,
                          "name": "uint232",
                          "nodeType": "ElementaryTypeName",
                          "src": "2704:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint232",
                            "typeString": "uint232"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2703:9:24"
                  },
                  "scope": 8475,
                  "src": "2647:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6848,
                    "nodeType": "Block",
                    "src": "3222:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6829,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6824,
                            "src": "3236:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6832,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3249:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": {
                                    "id": 6831,
                                    "name": "uint224",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3249:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  }
                                ],
                                "id": 6830,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "3244:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6833,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3244:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint224",
                                "typeString": "type(uint224)"
                              }
                            },
                            "id": 6834,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "3258:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3244:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "3236:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6842,
                        "nodeType": "IfStatement",
                        "src": "3232:105:24",
                        "trueBody": {
                          "id": 6841,
                          "nodeType": "Block",
                          "src": "3263:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323234",
                                    "id": 6837,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3315:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    "value": "224"
                                  },
                                  {
                                    "id": 6838,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6824,
                                    "src": "3320:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6836,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "3284:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6839,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3284:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6840,
                              "nodeType": "RevertStatement",
                              "src": "3277:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6845,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6824,
                              "src": "3361:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3353:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": {
                              "id": 6843,
                              "name": "uint224",
                              "nodeType": "ElementaryTypeName",
                              "src": "3353:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6846,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3353:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "functionReturnParameters": 6828,
                        "id": 6847,
                        "nodeType": "Return",
                        "src": "3346:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6822,
                    "nodeType": "StructuredDocumentation",
                    "src": "2871:280:24",
                    "text": " @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"
                  },
                  "id": 6849,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint224",
                  "nameLocation": "3165:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6825,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6824,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3183:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6849,
                        "src": "3175:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6823,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3175:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3174:15:24"
                  },
                  "returnParameters": {
                    "id": 6828,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6827,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6849,
                        "src": "3213:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "typeName": {
                          "id": 6826,
                          "name": "uint224",
                          "nodeType": "ElementaryTypeName",
                          "src": "3213:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3212:9:24"
                  },
                  "scope": 8475,
                  "src": "3156:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6876,
                    "nodeType": "Block",
                    "src": "3731:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6857,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6852,
                            "src": "3745:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6860,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3758:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint216_$",
                                    "typeString": "type(uint216)"
                                  },
                                  "typeName": {
                                    "id": 6859,
                                    "name": "uint216",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3758:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint216_$",
                                    "typeString": "type(uint216)"
                                  }
                                ],
                                "id": 6858,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "3753:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3753:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint216",
                                "typeString": "type(uint216)"
                              }
                            },
                            "id": 6862,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "3767:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3753:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint216",
                              "typeString": "uint216"
                            }
                          },
                          "src": "3745:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6870,
                        "nodeType": "IfStatement",
                        "src": "3741:105:24",
                        "trueBody": {
                          "id": 6869,
                          "nodeType": "Block",
                          "src": "3772:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323136",
                                    "id": 6865,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3824:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    "value": "216"
                                  },
                                  {
                                    "id": 6866,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6852,
                                    "src": "3829:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6864,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "3793:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6867,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3793:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6868,
                              "nodeType": "RevertStatement",
                              "src": "3786:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6873,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6852,
                              "src": "3870:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6872,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3862:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint216_$",
                              "typeString": "type(uint216)"
                            },
                            "typeName": {
                              "id": 6871,
                              "name": "uint216",
                              "nodeType": "ElementaryTypeName",
                              "src": "3862:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3862:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint216",
                            "typeString": "uint216"
                          }
                        },
                        "functionReturnParameters": 6856,
                        "id": 6875,
                        "nodeType": "Return",
                        "src": "3855:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6850,
                    "nodeType": "StructuredDocumentation",
                    "src": "3380:280:24",
                    "text": " @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"
                  },
                  "id": 6877,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint216",
                  "nameLocation": "3674:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6853,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6852,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3692:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6877,
                        "src": "3684:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6851,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3684:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3683:15:24"
                  },
                  "returnParameters": {
                    "id": 6856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6855,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6877,
                        "src": "3722:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint216",
                          "typeString": "uint216"
                        },
                        "typeName": {
                          "id": 6854,
                          "name": "uint216",
                          "nodeType": "ElementaryTypeName",
                          "src": "3722:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint216",
                            "typeString": "uint216"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3721:9:24"
                  },
                  "scope": 8475,
                  "src": "3665:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6904,
                    "nodeType": "Block",
                    "src": "4240:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6885,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6880,
                            "src": "4254:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6888,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4267:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint208_$",
                                    "typeString": "type(uint208)"
                                  },
                                  "typeName": {
                                    "id": 6887,
                                    "name": "uint208",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4267:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint208_$",
                                    "typeString": "type(uint208)"
                                  }
                                ],
                                "id": 6886,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "4262:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4262:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint208",
                                "typeString": "type(uint208)"
                              }
                            },
                            "id": 6890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "4276:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "4262:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint208",
                              "typeString": "uint208"
                            }
                          },
                          "src": "4254:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6898,
                        "nodeType": "IfStatement",
                        "src": "4250:105:24",
                        "trueBody": {
                          "id": 6897,
                          "nodeType": "Block",
                          "src": "4281:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323038",
                                    "id": 6893,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4333:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    "value": "208"
                                  },
                                  {
                                    "id": 6894,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6880,
                                    "src": "4338:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6892,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "4302:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6895,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4302:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6896,
                              "nodeType": "RevertStatement",
                              "src": "4295:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6901,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6880,
                              "src": "4379:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4371:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint208_$",
                              "typeString": "type(uint208)"
                            },
                            "typeName": {
                              "id": 6899,
                              "name": "uint208",
                              "nodeType": "ElementaryTypeName",
                              "src": "4371:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4371:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint208",
                            "typeString": "uint208"
                          }
                        },
                        "functionReturnParameters": 6884,
                        "id": 6903,
                        "nodeType": "Return",
                        "src": "4364:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6878,
                    "nodeType": "StructuredDocumentation",
                    "src": "3889:280:24",
                    "text": " @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"
                  },
                  "id": 6905,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint208",
                  "nameLocation": "4183:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6881,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6880,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4201:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6905,
                        "src": "4193:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6879,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4193:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4192:15:24"
                  },
                  "returnParameters": {
                    "id": 6884,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6883,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6905,
                        "src": "4231:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint208",
                          "typeString": "uint208"
                        },
                        "typeName": {
                          "id": 6882,
                          "name": "uint208",
                          "nodeType": "ElementaryTypeName",
                          "src": "4231:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint208",
                            "typeString": "uint208"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4230:9:24"
                  },
                  "scope": 8475,
                  "src": "4174:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6932,
                    "nodeType": "Block",
                    "src": "4749:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6913,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6908,
                            "src": "4763:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6916,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4776:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint200_$",
                                    "typeString": "type(uint200)"
                                  },
                                  "typeName": {
                                    "id": 6915,
                                    "name": "uint200",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4776:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint200_$",
                                    "typeString": "type(uint200)"
                                  }
                                ],
                                "id": 6914,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "4771:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6917,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4771:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint200",
                                "typeString": "type(uint200)"
                              }
                            },
                            "id": 6918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "4785:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "4771:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint200",
                              "typeString": "uint200"
                            }
                          },
                          "src": "4763:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6926,
                        "nodeType": "IfStatement",
                        "src": "4759:105:24",
                        "trueBody": {
                          "id": 6925,
                          "nodeType": "Block",
                          "src": "4790:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323030",
                                    "id": 6921,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4842:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    "value": "200"
                                  },
                                  {
                                    "id": 6922,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6908,
                                    "src": "4847:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6920,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "4811:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6923,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4811:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6924,
                              "nodeType": "RevertStatement",
                              "src": "4804:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6929,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6908,
                              "src": "4888:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4880:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint200_$",
                              "typeString": "type(uint200)"
                            },
                            "typeName": {
                              "id": 6927,
                              "name": "uint200",
                              "nodeType": "ElementaryTypeName",
                              "src": "4880:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4880:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint200",
                            "typeString": "uint200"
                          }
                        },
                        "functionReturnParameters": 6912,
                        "id": 6931,
                        "nodeType": "Return",
                        "src": "4873:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6906,
                    "nodeType": "StructuredDocumentation",
                    "src": "4398:280:24",
                    "text": " @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"
                  },
                  "id": 6933,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint200",
                  "nameLocation": "4692:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6909,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6908,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4710:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6933,
                        "src": "4702:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6907,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4702:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4701:15:24"
                  },
                  "returnParameters": {
                    "id": 6912,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6911,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6933,
                        "src": "4740:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint200",
                          "typeString": "uint200"
                        },
                        "typeName": {
                          "id": 6910,
                          "name": "uint200",
                          "nodeType": "ElementaryTypeName",
                          "src": "4740:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint200",
                            "typeString": "uint200"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4739:9:24"
                  },
                  "scope": 8475,
                  "src": "4683:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6960,
                    "nodeType": "Block",
                    "src": "5258:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6941,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6936,
                            "src": "5272:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6944,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5285:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint192_$",
                                    "typeString": "type(uint192)"
                                  },
                                  "typeName": {
                                    "id": 6943,
                                    "name": "uint192",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5285:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint192_$",
                                    "typeString": "type(uint192)"
                                  }
                                ],
                                "id": 6942,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "5280:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5280:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint192",
                                "typeString": "type(uint192)"
                              }
                            },
                            "id": 6946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "5294:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "5280:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint192",
                              "typeString": "uint192"
                            }
                          },
                          "src": "5272:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6954,
                        "nodeType": "IfStatement",
                        "src": "5268:105:24",
                        "trueBody": {
                          "id": 6953,
                          "nodeType": "Block",
                          "src": "5299:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313932",
                                    "id": 6949,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5351:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  {
                                    "id": 6950,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6936,
                                    "src": "5356:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6948,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "5320:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6951,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5320:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6952,
                              "nodeType": "RevertStatement",
                              "src": "5313:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6957,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6936,
                              "src": "5397:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5389:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint192_$",
                              "typeString": "type(uint192)"
                            },
                            "typeName": {
                              "id": 6955,
                              "name": "uint192",
                              "nodeType": "ElementaryTypeName",
                              "src": "5389:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5389:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint192",
                            "typeString": "uint192"
                          }
                        },
                        "functionReturnParameters": 6940,
                        "id": 6959,
                        "nodeType": "Return",
                        "src": "5382:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6934,
                    "nodeType": "StructuredDocumentation",
                    "src": "4907:280:24",
                    "text": " @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"
                  },
                  "id": 6961,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint192",
                  "nameLocation": "5201:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6937,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6936,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5219:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6961,
                        "src": "5211:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6935,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5211:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5210:15:24"
                  },
                  "returnParameters": {
                    "id": 6940,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6939,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6961,
                        "src": "5249:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        },
                        "typeName": {
                          "id": 6938,
                          "name": "uint192",
                          "nodeType": "ElementaryTypeName",
                          "src": "5249:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint192",
                            "typeString": "uint192"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5248:9:24"
                  },
                  "scope": 8475,
                  "src": "5192:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6988,
                    "nodeType": "Block",
                    "src": "5767:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6969,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6964,
                            "src": "5781:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6972,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5794:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint184_$",
                                    "typeString": "type(uint184)"
                                  },
                                  "typeName": {
                                    "id": 6971,
                                    "name": "uint184",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5794:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint184_$",
                                    "typeString": "type(uint184)"
                                  }
                                ],
                                "id": 6970,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "5789:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 6973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5789:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint184",
                                "typeString": "type(uint184)"
                              }
                            },
                            "id": 6974,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "5803:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "5789:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint184",
                              "typeString": "uint184"
                            }
                          },
                          "src": "5781:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6982,
                        "nodeType": "IfStatement",
                        "src": "5777:105:24",
                        "trueBody": {
                          "id": 6981,
                          "nodeType": "Block",
                          "src": "5808:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313834",
                                    "id": 6977,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5860:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    "value": "184"
                                  },
                                  {
                                    "id": 6978,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6964,
                                    "src": "5865:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6976,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "5829:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 6979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5829:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6980,
                              "nodeType": "RevertStatement",
                              "src": "5822:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6985,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6964,
                              "src": "5906:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6984,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5898:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint184_$",
                              "typeString": "type(uint184)"
                            },
                            "typeName": {
                              "id": 6983,
                              "name": "uint184",
                              "nodeType": "ElementaryTypeName",
                              "src": "5898:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5898:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint184",
                            "typeString": "uint184"
                          }
                        },
                        "functionReturnParameters": 6968,
                        "id": 6987,
                        "nodeType": "Return",
                        "src": "5891:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6962,
                    "nodeType": "StructuredDocumentation",
                    "src": "5416:280:24",
                    "text": " @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"
                  },
                  "id": 6989,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint184",
                  "nameLocation": "5710:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6965,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6964,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5728:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 6989,
                        "src": "5720:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6963,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5720:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5719:15:24"
                  },
                  "returnParameters": {
                    "id": 6968,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6967,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6989,
                        "src": "5758:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint184",
                          "typeString": "uint184"
                        },
                        "typeName": {
                          "id": 6966,
                          "name": "uint184",
                          "nodeType": "ElementaryTypeName",
                          "src": "5758:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint184",
                            "typeString": "uint184"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5757:9:24"
                  },
                  "scope": 8475,
                  "src": "5701:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7016,
                    "nodeType": "Block",
                    "src": "6276:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7003,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6997,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6992,
                            "src": "6290:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7000,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6303:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint176_$",
                                    "typeString": "type(uint176)"
                                  },
                                  "typeName": {
                                    "id": 6999,
                                    "name": "uint176",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6303:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint176_$",
                                    "typeString": "type(uint176)"
                                  }
                                ],
                                "id": 6998,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "6298:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6298:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint176",
                                "typeString": "type(uint176)"
                              }
                            },
                            "id": 7002,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "6312:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "6298:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint176",
                              "typeString": "uint176"
                            }
                          },
                          "src": "6290:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7010,
                        "nodeType": "IfStatement",
                        "src": "6286:105:24",
                        "trueBody": {
                          "id": 7009,
                          "nodeType": "Block",
                          "src": "6317:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313736",
                                    "id": 7005,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6369:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    "value": "176"
                                  },
                                  {
                                    "id": 7006,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6992,
                                    "src": "6374:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7004,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "6338:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7007,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6338:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7008,
                              "nodeType": "RevertStatement",
                              "src": "6331:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7013,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6992,
                              "src": "6415:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6407:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint176_$",
                              "typeString": "type(uint176)"
                            },
                            "typeName": {
                              "id": 7011,
                              "name": "uint176",
                              "nodeType": "ElementaryTypeName",
                              "src": "6407:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6407:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint176",
                            "typeString": "uint176"
                          }
                        },
                        "functionReturnParameters": 6996,
                        "id": 7015,
                        "nodeType": "Return",
                        "src": "6400:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6990,
                    "nodeType": "StructuredDocumentation",
                    "src": "5925:280:24",
                    "text": " @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"
                  },
                  "id": 7017,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint176",
                  "nameLocation": "6219:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6993,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6992,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6237:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7017,
                        "src": "6229:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6991,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6229:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6228:15:24"
                  },
                  "returnParameters": {
                    "id": 6996,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6995,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7017,
                        "src": "6267:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint176",
                          "typeString": "uint176"
                        },
                        "typeName": {
                          "id": 6994,
                          "name": "uint176",
                          "nodeType": "ElementaryTypeName",
                          "src": "6267:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint176",
                            "typeString": "uint176"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6266:9:24"
                  },
                  "scope": 8475,
                  "src": "6210:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7044,
                    "nodeType": "Block",
                    "src": "6785:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7025,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7020,
                            "src": "6799:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7028,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6812:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint168_$",
                                    "typeString": "type(uint168)"
                                  },
                                  "typeName": {
                                    "id": 7027,
                                    "name": "uint168",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6812:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint168_$",
                                    "typeString": "type(uint168)"
                                  }
                                ],
                                "id": 7026,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "6807:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6807:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint168",
                                "typeString": "type(uint168)"
                              }
                            },
                            "id": 7030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "6821:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "6807:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint168",
                              "typeString": "uint168"
                            }
                          },
                          "src": "6799:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7038,
                        "nodeType": "IfStatement",
                        "src": "6795:105:24",
                        "trueBody": {
                          "id": 7037,
                          "nodeType": "Block",
                          "src": "6826:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313638",
                                    "id": 7033,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6878:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    "value": "168"
                                  },
                                  {
                                    "id": 7034,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7020,
                                    "src": "6883:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7032,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "6847:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6847:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7036,
                              "nodeType": "RevertStatement",
                              "src": "6840:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7041,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7020,
                              "src": "6924:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6916:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint168_$",
                              "typeString": "type(uint168)"
                            },
                            "typeName": {
                              "id": 7039,
                              "name": "uint168",
                              "nodeType": "ElementaryTypeName",
                              "src": "6916:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6916:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint168",
                            "typeString": "uint168"
                          }
                        },
                        "functionReturnParameters": 7024,
                        "id": 7043,
                        "nodeType": "Return",
                        "src": "6909:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7018,
                    "nodeType": "StructuredDocumentation",
                    "src": "6434:280:24",
                    "text": " @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"
                  },
                  "id": 7045,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint168",
                  "nameLocation": "6728:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7021,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7020,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6746:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7045,
                        "src": "6738:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7019,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6738:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6737:15:24"
                  },
                  "returnParameters": {
                    "id": 7024,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7023,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7045,
                        "src": "6776:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint168",
                          "typeString": "uint168"
                        },
                        "typeName": {
                          "id": 7022,
                          "name": "uint168",
                          "nodeType": "ElementaryTypeName",
                          "src": "6776:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint168",
                            "typeString": "uint168"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6775:9:24"
                  },
                  "scope": 8475,
                  "src": "6719:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7072,
                    "nodeType": "Block",
                    "src": "7294:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7053,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7048,
                            "src": "7308:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7056,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7321:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 7055,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7321:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  }
                                ],
                                "id": 7054,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "7316:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7316:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint160",
                                "typeString": "type(uint160)"
                              }
                            },
                            "id": 7058,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "7330:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "7316:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "7308:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7066,
                        "nodeType": "IfStatement",
                        "src": "7304:105:24",
                        "trueBody": {
                          "id": 7065,
                          "nodeType": "Block",
                          "src": "7335:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313630",
                                    "id": 7061,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7387:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    "value": "160"
                                  },
                                  {
                                    "id": 7062,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7048,
                                    "src": "7392:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7060,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "7356:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7356:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7064,
                              "nodeType": "RevertStatement",
                              "src": "7349:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7069,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7048,
                              "src": "7433:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7425:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 7067,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "7425:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7425:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 7052,
                        "id": 7071,
                        "nodeType": "Return",
                        "src": "7418:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7046,
                    "nodeType": "StructuredDocumentation",
                    "src": "6943:280:24",
                    "text": " @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"
                  },
                  "id": 7073,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint160",
                  "nameLocation": "7237:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7049,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7048,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "7255:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7073,
                        "src": "7247:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7047,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7247:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7246:15:24"
                  },
                  "returnParameters": {
                    "id": 7052,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7051,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7073,
                        "src": "7285:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 7050,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "7285:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7284:9:24"
                  },
                  "scope": 8475,
                  "src": "7228:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7100,
                    "nodeType": "Block",
                    "src": "7803:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7081,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7076,
                            "src": "7817:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7084,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7830:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint152_$",
                                    "typeString": "type(uint152)"
                                  },
                                  "typeName": {
                                    "id": 7083,
                                    "name": "uint152",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7830:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint152_$",
                                    "typeString": "type(uint152)"
                                  }
                                ],
                                "id": 7082,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "7825:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7085,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7825:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint152",
                                "typeString": "type(uint152)"
                              }
                            },
                            "id": 7086,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "7839:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "7825:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint152",
                              "typeString": "uint152"
                            }
                          },
                          "src": "7817:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7094,
                        "nodeType": "IfStatement",
                        "src": "7813:105:24",
                        "trueBody": {
                          "id": 7093,
                          "nodeType": "Block",
                          "src": "7844:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313532",
                                    "id": 7089,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7896:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    "value": "152"
                                  },
                                  {
                                    "id": 7090,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7076,
                                    "src": "7901:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7088,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "7865:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7091,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7865:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7092,
                              "nodeType": "RevertStatement",
                              "src": "7858:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7097,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7076,
                              "src": "7942:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7934:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint152_$",
                              "typeString": "type(uint152)"
                            },
                            "typeName": {
                              "id": 7095,
                              "name": "uint152",
                              "nodeType": "ElementaryTypeName",
                              "src": "7934:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7934:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint152",
                            "typeString": "uint152"
                          }
                        },
                        "functionReturnParameters": 7080,
                        "id": 7099,
                        "nodeType": "Return",
                        "src": "7927:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7074,
                    "nodeType": "StructuredDocumentation",
                    "src": "7452:280:24",
                    "text": " @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"
                  },
                  "id": 7101,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint152",
                  "nameLocation": "7746:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7077,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7076,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "7764:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7101,
                        "src": "7756:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7075,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7756:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7755:15:24"
                  },
                  "returnParameters": {
                    "id": 7080,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7079,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7101,
                        "src": "7794:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint152",
                          "typeString": "uint152"
                        },
                        "typeName": {
                          "id": 7078,
                          "name": "uint152",
                          "nodeType": "ElementaryTypeName",
                          "src": "7794:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint152",
                            "typeString": "uint152"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7793:9:24"
                  },
                  "scope": 8475,
                  "src": "7737:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7128,
                    "nodeType": "Block",
                    "src": "8312:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7115,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7109,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7104,
                            "src": "8326:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7112,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8339:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint144_$",
                                    "typeString": "type(uint144)"
                                  },
                                  "typeName": {
                                    "id": 7111,
                                    "name": "uint144",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8339:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint144_$",
                                    "typeString": "type(uint144)"
                                  }
                                ],
                                "id": 7110,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "8334:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7113,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8334:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint144",
                                "typeString": "type(uint144)"
                              }
                            },
                            "id": 7114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "8348:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "8334:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint144",
                              "typeString": "uint144"
                            }
                          },
                          "src": "8326:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7122,
                        "nodeType": "IfStatement",
                        "src": "8322:105:24",
                        "trueBody": {
                          "id": 7121,
                          "nodeType": "Block",
                          "src": "8353:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313434",
                                    "id": 7117,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8405:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    "value": "144"
                                  },
                                  {
                                    "id": 7118,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7104,
                                    "src": "8410:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7116,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "8374:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7119,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8374:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7120,
                              "nodeType": "RevertStatement",
                              "src": "8367:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7125,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7104,
                              "src": "8451:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7124,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8443:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint144_$",
                              "typeString": "type(uint144)"
                            },
                            "typeName": {
                              "id": 7123,
                              "name": "uint144",
                              "nodeType": "ElementaryTypeName",
                              "src": "8443:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8443:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint144",
                            "typeString": "uint144"
                          }
                        },
                        "functionReturnParameters": 7108,
                        "id": 7127,
                        "nodeType": "Return",
                        "src": "8436:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7102,
                    "nodeType": "StructuredDocumentation",
                    "src": "7961:280:24",
                    "text": " @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"
                  },
                  "id": 7129,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint144",
                  "nameLocation": "8255:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7105,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7104,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8273:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7129,
                        "src": "8265:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7103,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8265:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8264:15:24"
                  },
                  "returnParameters": {
                    "id": 7108,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7107,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7129,
                        "src": "8303:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint144",
                          "typeString": "uint144"
                        },
                        "typeName": {
                          "id": 7106,
                          "name": "uint144",
                          "nodeType": "ElementaryTypeName",
                          "src": "8303:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint144",
                            "typeString": "uint144"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8302:9:24"
                  },
                  "scope": 8475,
                  "src": "8246:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7156,
                    "nodeType": "Block",
                    "src": "8821:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7137,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7132,
                            "src": "8835:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7140,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8848:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint136_$",
                                    "typeString": "type(uint136)"
                                  },
                                  "typeName": {
                                    "id": 7139,
                                    "name": "uint136",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8848:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint136_$",
                                    "typeString": "type(uint136)"
                                  }
                                ],
                                "id": 7138,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "8843:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7141,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8843:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint136",
                                "typeString": "type(uint136)"
                              }
                            },
                            "id": 7142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "8857:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "8843:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint136",
                              "typeString": "uint136"
                            }
                          },
                          "src": "8835:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7150,
                        "nodeType": "IfStatement",
                        "src": "8831:105:24",
                        "trueBody": {
                          "id": 7149,
                          "nodeType": "Block",
                          "src": "8862:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313336",
                                    "id": 7145,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8914:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    "value": "136"
                                  },
                                  {
                                    "id": 7146,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7132,
                                    "src": "8919:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7144,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "8883:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7147,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8883:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7148,
                              "nodeType": "RevertStatement",
                              "src": "8876:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7153,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7132,
                              "src": "8960:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8952:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint136_$",
                              "typeString": "type(uint136)"
                            },
                            "typeName": {
                              "id": 7151,
                              "name": "uint136",
                              "nodeType": "ElementaryTypeName",
                              "src": "8952:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8952:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint136",
                            "typeString": "uint136"
                          }
                        },
                        "functionReturnParameters": 7136,
                        "id": 7155,
                        "nodeType": "Return",
                        "src": "8945:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7130,
                    "nodeType": "StructuredDocumentation",
                    "src": "8470:280:24",
                    "text": " @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"
                  },
                  "id": 7157,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint136",
                  "nameLocation": "8764:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7133,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7132,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8782:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7157,
                        "src": "8774:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7131,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8774:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8773:15:24"
                  },
                  "returnParameters": {
                    "id": 7136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7135,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7157,
                        "src": "8812:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint136",
                          "typeString": "uint136"
                        },
                        "typeName": {
                          "id": 7134,
                          "name": "uint136",
                          "nodeType": "ElementaryTypeName",
                          "src": "8812:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint136",
                            "typeString": "uint136"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8811:9:24"
                  },
                  "scope": 8475,
                  "src": "8755:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7184,
                    "nodeType": "Block",
                    "src": "9330:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7165,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7160,
                            "src": "9344:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7168,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9357:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 7167,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9357:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  }
                                ],
                                "id": 7166,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "9352:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7169,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9352:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint128",
                                "typeString": "type(uint128)"
                              }
                            },
                            "id": 7170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "9366:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "9352:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "9344:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7178,
                        "nodeType": "IfStatement",
                        "src": "9340:105:24",
                        "trueBody": {
                          "id": 7177,
                          "nodeType": "Block",
                          "src": "9371:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313238",
                                    "id": 7173,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9423:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  {
                                    "id": 7174,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7160,
                                    "src": "9428:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7172,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "9392:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7175,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9392:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7176,
                              "nodeType": "RevertStatement",
                              "src": "9385:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7181,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7160,
                              "src": "9469:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9461:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            },
                            "typeName": {
                              "id": 7179,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "9461:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9461:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "functionReturnParameters": 7164,
                        "id": 7183,
                        "nodeType": "Return",
                        "src": "9454:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7158,
                    "nodeType": "StructuredDocumentation",
                    "src": "8979:280:24",
                    "text": " @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"
                  },
                  "id": 7185,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint128",
                  "nameLocation": "9273:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7161,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7160,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9291:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7185,
                        "src": "9283:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9283:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9282:15:24"
                  },
                  "returnParameters": {
                    "id": 7164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7163,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7185,
                        "src": "9321:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 7162,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "9321:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9320:9:24"
                  },
                  "scope": 8475,
                  "src": "9264:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7212,
                    "nodeType": "Block",
                    "src": "9839:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7193,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7188,
                            "src": "9853:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7196,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9866:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint120_$",
                                    "typeString": "type(uint120)"
                                  },
                                  "typeName": {
                                    "id": 7195,
                                    "name": "uint120",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9866:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint120_$",
                                    "typeString": "type(uint120)"
                                  }
                                ],
                                "id": 7194,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "9861:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7197,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9861:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint120",
                                "typeString": "type(uint120)"
                              }
                            },
                            "id": 7198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "9875:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "9861:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint120",
                              "typeString": "uint120"
                            }
                          },
                          "src": "9853:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7206,
                        "nodeType": "IfStatement",
                        "src": "9849:105:24",
                        "trueBody": {
                          "id": 7205,
                          "nodeType": "Block",
                          "src": "9880:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313230",
                                    "id": 7201,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9932:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    "value": "120"
                                  },
                                  {
                                    "id": 7202,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7188,
                                    "src": "9937:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7200,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "9901:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7203,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9901:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7204,
                              "nodeType": "RevertStatement",
                              "src": "9894:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7209,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7188,
                              "src": "9978:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9970:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint120_$",
                              "typeString": "type(uint120)"
                            },
                            "typeName": {
                              "id": 7207,
                              "name": "uint120",
                              "nodeType": "ElementaryTypeName",
                              "src": "9970:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9970:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint120",
                            "typeString": "uint120"
                          }
                        },
                        "functionReturnParameters": 7192,
                        "id": 7211,
                        "nodeType": "Return",
                        "src": "9963:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7186,
                    "nodeType": "StructuredDocumentation",
                    "src": "9488:280:24",
                    "text": " @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"
                  },
                  "id": 7213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint120",
                  "nameLocation": "9782:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7189,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7188,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9800:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7213,
                        "src": "9792:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7187,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9792:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9791:15:24"
                  },
                  "returnParameters": {
                    "id": 7192,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7191,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7213,
                        "src": "9830:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint120",
                          "typeString": "uint120"
                        },
                        "typeName": {
                          "id": 7190,
                          "name": "uint120",
                          "nodeType": "ElementaryTypeName",
                          "src": "9830:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint120",
                            "typeString": "uint120"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9829:9:24"
                  },
                  "scope": 8475,
                  "src": "9773:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7240,
                    "nodeType": "Block",
                    "src": "10348:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7221,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7216,
                            "src": "10362:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7224,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10375:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint112_$",
                                    "typeString": "type(uint112)"
                                  },
                                  "typeName": {
                                    "id": 7223,
                                    "name": "uint112",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10375:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint112_$",
                                    "typeString": "type(uint112)"
                                  }
                                ],
                                "id": 7222,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "10370:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10370:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint112",
                                "typeString": "type(uint112)"
                              }
                            },
                            "id": 7226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "10384:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "10370:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint112",
                              "typeString": "uint112"
                            }
                          },
                          "src": "10362:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7234,
                        "nodeType": "IfStatement",
                        "src": "10358:105:24",
                        "trueBody": {
                          "id": 7233,
                          "nodeType": "Block",
                          "src": "10389:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313132",
                                    "id": 7229,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10441:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    "value": "112"
                                  },
                                  {
                                    "id": 7230,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7216,
                                    "src": "10446:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7228,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "10410:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7231,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10410:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7232,
                              "nodeType": "RevertStatement",
                              "src": "10403:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7237,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7216,
                              "src": "10487:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10479:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint112_$",
                              "typeString": "type(uint112)"
                            },
                            "typeName": {
                              "id": 7235,
                              "name": "uint112",
                              "nodeType": "ElementaryTypeName",
                              "src": "10479:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10479:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "functionReturnParameters": 7220,
                        "id": 7239,
                        "nodeType": "Return",
                        "src": "10472:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7214,
                    "nodeType": "StructuredDocumentation",
                    "src": "9997:280:24",
                    "text": " @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"
                  },
                  "id": 7241,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint112",
                  "nameLocation": "10291:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7217,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7216,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10309:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7241,
                        "src": "10301:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7215,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10301:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10300:15:24"
                  },
                  "returnParameters": {
                    "id": 7220,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7219,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7241,
                        "src": "10339:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 7218,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "10339:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10338:9:24"
                  },
                  "scope": 8475,
                  "src": "10282:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7268,
                    "nodeType": "Block",
                    "src": "10857:152:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7249,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7244,
                            "src": "10871:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7252,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10884:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint104_$",
                                    "typeString": "type(uint104)"
                                  },
                                  "typeName": {
                                    "id": 7251,
                                    "name": "uint104",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10884:7:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint104_$",
                                    "typeString": "type(uint104)"
                                  }
                                ],
                                "id": 7250,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "10879:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7253,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10879:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint104",
                                "typeString": "type(uint104)"
                              }
                            },
                            "id": 7254,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "10893:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "10879:17:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint104",
                              "typeString": "uint104"
                            }
                          },
                          "src": "10871:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7262,
                        "nodeType": "IfStatement",
                        "src": "10867:105:24",
                        "trueBody": {
                          "id": 7261,
                          "nodeType": "Block",
                          "src": "10898:74:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313034",
                                    "id": 7257,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10950:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    "value": "104"
                                  },
                                  {
                                    "id": 7258,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7244,
                                    "src": "10955:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7256,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "10919:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7259,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10919:42:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7260,
                              "nodeType": "RevertStatement",
                              "src": "10912:49:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7265,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7244,
                              "src": "10996:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10988:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint104_$",
                              "typeString": "type(uint104)"
                            },
                            "typeName": {
                              "id": 7263,
                              "name": "uint104",
                              "nodeType": "ElementaryTypeName",
                              "src": "10988:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10988:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint104",
                            "typeString": "uint104"
                          }
                        },
                        "functionReturnParameters": 7248,
                        "id": 7267,
                        "nodeType": "Return",
                        "src": "10981:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7242,
                    "nodeType": "StructuredDocumentation",
                    "src": "10506:280:24",
                    "text": " @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"
                  },
                  "id": 7269,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint104",
                  "nameLocation": "10800:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7245,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7244,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10818:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7269,
                        "src": "10810:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7243,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10810:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10809:15:24"
                  },
                  "returnParameters": {
                    "id": 7248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7247,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7269,
                        "src": "10848:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint104",
                          "typeString": "uint104"
                        },
                        "typeName": {
                          "id": 7246,
                          "name": "uint104",
                          "nodeType": "ElementaryTypeName",
                          "src": "10848:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint104",
                            "typeString": "uint104"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10847:9:24"
                  },
                  "scope": 8475,
                  "src": "10791:218:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7296,
                    "nodeType": "Block",
                    "src": "11360:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7277,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7272,
                            "src": "11374:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7280,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11387:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint96_$",
                                    "typeString": "type(uint96)"
                                  },
                                  "typeName": {
                                    "id": 7279,
                                    "name": "uint96",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11387:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint96_$",
                                    "typeString": "type(uint96)"
                                  }
                                ],
                                "id": 7278,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "11382:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7281,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11382:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint96",
                                "typeString": "type(uint96)"
                              }
                            },
                            "id": 7282,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "11395:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "11382:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "11374:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7290,
                        "nodeType": "IfStatement",
                        "src": "11370:103:24",
                        "trueBody": {
                          "id": 7289,
                          "nodeType": "Block",
                          "src": "11400:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3936",
                                    "id": 7285,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11452:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  {
                                    "id": 7286,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7272,
                                    "src": "11456:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7284,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "11421:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7287,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11421:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7288,
                              "nodeType": "RevertStatement",
                              "src": "11414:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7293,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7272,
                              "src": "11496:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11489:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint96_$",
                              "typeString": "type(uint96)"
                            },
                            "typeName": {
                              "id": 7291,
                              "name": "uint96",
                              "nodeType": "ElementaryTypeName",
                              "src": "11489:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11489:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "functionReturnParameters": 7276,
                        "id": 7295,
                        "nodeType": "Return",
                        "src": "11482:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7270,
                    "nodeType": "StructuredDocumentation",
                    "src": "11015:276:24",
                    "text": " @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"
                  },
                  "id": 7297,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint96",
                  "nameLocation": "11305:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7273,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7272,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11322:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7297,
                        "src": "11314:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7271,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11314:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11313:15:24"
                  },
                  "returnParameters": {
                    "id": 7276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7275,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7297,
                        "src": "11352:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        },
                        "typeName": {
                          "id": 7274,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "11352:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11351:8:24"
                  },
                  "scope": 8475,
                  "src": "11296:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7324,
                    "nodeType": "Block",
                    "src": "11860:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7305,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7300,
                            "src": "11874:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7308,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11887:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint88_$",
                                    "typeString": "type(uint88)"
                                  },
                                  "typeName": {
                                    "id": 7307,
                                    "name": "uint88",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11887:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint88_$",
                                    "typeString": "type(uint88)"
                                  }
                                ],
                                "id": 7306,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "11882:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7309,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11882:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint88",
                                "typeString": "type(uint88)"
                              }
                            },
                            "id": 7310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "11895:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "11882:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint88",
                              "typeString": "uint88"
                            }
                          },
                          "src": "11874:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7318,
                        "nodeType": "IfStatement",
                        "src": "11870:103:24",
                        "trueBody": {
                          "id": 7317,
                          "nodeType": "Block",
                          "src": "11900:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3838",
                                    "id": 7313,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11952:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    "value": "88"
                                  },
                                  {
                                    "id": 7314,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7300,
                                    "src": "11956:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7312,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "11921:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7315,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11921:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7316,
                              "nodeType": "RevertStatement",
                              "src": "11914:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7321,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7300,
                              "src": "11996:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11989:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint88_$",
                              "typeString": "type(uint88)"
                            },
                            "typeName": {
                              "id": 7319,
                              "name": "uint88",
                              "nodeType": "ElementaryTypeName",
                              "src": "11989:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7322,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11989:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint88",
                            "typeString": "uint88"
                          }
                        },
                        "functionReturnParameters": 7304,
                        "id": 7323,
                        "nodeType": "Return",
                        "src": "11982:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7298,
                    "nodeType": "StructuredDocumentation",
                    "src": "11515:276:24",
                    "text": " @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"
                  },
                  "id": 7325,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint88",
                  "nameLocation": "11805:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7300,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11822:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7325,
                        "src": "11814:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7299,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11814:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11813:15:24"
                  },
                  "returnParameters": {
                    "id": 7304,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7303,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7325,
                        "src": "11852:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint88",
                          "typeString": "uint88"
                        },
                        "typeName": {
                          "id": 7302,
                          "name": "uint88",
                          "nodeType": "ElementaryTypeName",
                          "src": "11852:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint88",
                            "typeString": "uint88"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11851:8:24"
                  },
                  "scope": 8475,
                  "src": "11796:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7352,
                    "nodeType": "Block",
                    "src": "12360:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7333,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7328,
                            "src": "12374:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7336,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "12387:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint80_$",
                                    "typeString": "type(uint80)"
                                  },
                                  "typeName": {
                                    "id": 7335,
                                    "name": "uint80",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12387:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint80_$",
                                    "typeString": "type(uint80)"
                                  }
                                ],
                                "id": 7334,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "12382:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12382:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint80",
                                "typeString": "type(uint80)"
                              }
                            },
                            "id": 7338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "12395:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "12382:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint80",
                              "typeString": "uint80"
                            }
                          },
                          "src": "12374:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7346,
                        "nodeType": "IfStatement",
                        "src": "12370:103:24",
                        "trueBody": {
                          "id": 7345,
                          "nodeType": "Block",
                          "src": "12400:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3830",
                                    "id": 7341,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12452:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    "value": "80"
                                  },
                                  {
                                    "id": 7342,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7328,
                                    "src": "12456:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7340,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "12421:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12421:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7344,
                              "nodeType": "RevertStatement",
                              "src": "12414:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7349,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7328,
                              "src": "12496:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7348,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12489:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint80_$",
                              "typeString": "type(uint80)"
                            },
                            "typeName": {
                              "id": 7347,
                              "name": "uint80",
                              "nodeType": "ElementaryTypeName",
                              "src": "12489:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7350,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12489:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint80",
                            "typeString": "uint80"
                          }
                        },
                        "functionReturnParameters": 7332,
                        "id": 7351,
                        "nodeType": "Return",
                        "src": "12482:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7326,
                    "nodeType": "StructuredDocumentation",
                    "src": "12015:276:24",
                    "text": " @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"
                  },
                  "id": 7353,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint80",
                  "nameLocation": "12305:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7329,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7328,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12322:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7353,
                        "src": "12314:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7327,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12314:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12313:15:24"
                  },
                  "returnParameters": {
                    "id": 7332,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7331,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7353,
                        "src": "12352:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint80",
                          "typeString": "uint80"
                        },
                        "typeName": {
                          "id": 7330,
                          "name": "uint80",
                          "nodeType": "ElementaryTypeName",
                          "src": "12352:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint80",
                            "typeString": "uint80"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12351:8:24"
                  },
                  "scope": 8475,
                  "src": "12296:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7380,
                    "nodeType": "Block",
                    "src": "12860:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7361,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7356,
                            "src": "12874:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7364,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "12887:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint72_$",
                                    "typeString": "type(uint72)"
                                  },
                                  "typeName": {
                                    "id": 7363,
                                    "name": "uint72",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12887:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint72_$",
                                    "typeString": "type(uint72)"
                                  }
                                ],
                                "id": 7362,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "12882:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7365,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12882:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint72",
                                "typeString": "type(uint72)"
                              }
                            },
                            "id": 7366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "12895:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "12882:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint72",
                              "typeString": "uint72"
                            }
                          },
                          "src": "12874:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7374,
                        "nodeType": "IfStatement",
                        "src": "12870:103:24",
                        "trueBody": {
                          "id": 7373,
                          "nodeType": "Block",
                          "src": "12900:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3732",
                                    "id": 7369,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12952:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    "value": "72"
                                  },
                                  {
                                    "id": 7370,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7356,
                                    "src": "12956:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7368,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "12921:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7371,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12921:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7372,
                              "nodeType": "RevertStatement",
                              "src": "12914:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7377,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "12996:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7376,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12989:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint72_$",
                              "typeString": "type(uint72)"
                            },
                            "typeName": {
                              "id": 7375,
                              "name": "uint72",
                              "nodeType": "ElementaryTypeName",
                              "src": "12989:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12989:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint72",
                            "typeString": "uint72"
                          }
                        },
                        "functionReturnParameters": 7360,
                        "id": 7379,
                        "nodeType": "Return",
                        "src": "12982:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7354,
                    "nodeType": "StructuredDocumentation",
                    "src": "12515:276:24",
                    "text": " @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"
                  },
                  "id": 7381,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint72",
                  "nameLocation": "12805:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7356,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12822:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7381,
                        "src": "12814:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7355,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12814:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12813:15:24"
                  },
                  "returnParameters": {
                    "id": 7360,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7359,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7381,
                        "src": "12852:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint72",
                          "typeString": "uint72"
                        },
                        "typeName": {
                          "id": 7358,
                          "name": "uint72",
                          "nodeType": "ElementaryTypeName",
                          "src": "12852:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint72",
                            "typeString": "uint72"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12851:8:24"
                  },
                  "scope": 8475,
                  "src": "12796:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7408,
                    "nodeType": "Block",
                    "src": "13360:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7389,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7384,
                            "src": "13374:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7392,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13387:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 7391,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13387:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  }
                                ],
                                "id": 7390,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "13382:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13382:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint64",
                                "typeString": "type(uint64)"
                              }
                            },
                            "id": 7394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "13395:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "13382:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "13374:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7402,
                        "nodeType": "IfStatement",
                        "src": "13370:103:24",
                        "trueBody": {
                          "id": 7401,
                          "nodeType": "Block",
                          "src": "13400:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3634",
                                    "id": 7397,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13452:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  {
                                    "id": 7398,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7384,
                                    "src": "13456:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7396,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "13421:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7399,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13421:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7400,
                              "nodeType": "RevertStatement",
                              "src": "13414:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7405,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7384,
                              "src": "13496:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7404,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13489:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            },
                            "typeName": {
                              "id": 7403,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "13489:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13489:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 7388,
                        "id": 7407,
                        "nodeType": "Return",
                        "src": "13482:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7382,
                    "nodeType": "StructuredDocumentation",
                    "src": "13015:276:24",
                    "text": " @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"
                  },
                  "id": 7409,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint64",
                  "nameLocation": "13305:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7385,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7384,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "13322:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7409,
                        "src": "13314:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7383,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13314:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13313:15:24"
                  },
                  "returnParameters": {
                    "id": 7388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7387,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7409,
                        "src": "13352:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 7386,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "13352:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13351:8:24"
                  },
                  "scope": 8475,
                  "src": "13296:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7436,
                    "nodeType": "Block",
                    "src": "13860:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7417,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7412,
                            "src": "13874:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7420,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13887:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint56_$",
                                    "typeString": "type(uint56)"
                                  },
                                  "typeName": {
                                    "id": 7419,
                                    "name": "uint56",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13887:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint56_$",
                                    "typeString": "type(uint56)"
                                  }
                                ],
                                "id": 7418,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "13882:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7421,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13882:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint56",
                                "typeString": "type(uint56)"
                              }
                            },
                            "id": 7422,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "13895:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "13882:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint56",
                              "typeString": "uint56"
                            }
                          },
                          "src": "13874:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7430,
                        "nodeType": "IfStatement",
                        "src": "13870:103:24",
                        "trueBody": {
                          "id": 7429,
                          "nodeType": "Block",
                          "src": "13900:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3536",
                                    "id": 7425,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13952:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    "value": "56"
                                  },
                                  {
                                    "id": 7426,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7412,
                                    "src": "13956:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7424,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "13921:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13921:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7428,
                              "nodeType": "RevertStatement",
                              "src": "13914:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7433,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7412,
                              "src": "13996:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13989:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint56_$",
                              "typeString": "type(uint56)"
                            },
                            "typeName": {
                              "id": 7431,
                              "name": "uint56",
                              "nodeType": "ElementaryTypeName",
                              "src": "13989:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7434,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13989:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint56",
                            "typeString": "uint56"
                          }
                        },
                        "functionReturnParameters": 7416,
                        "id": 7435,
                        "nodeType": "Return",
                        "src": "13982:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7410,
                    "nodeType": "StructuredDocumentation",
                    "src": "13515:276:24",
                    "text": " @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"
                  },
                  "id": 7437,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint56",
                  "nameLocation": "13805:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7413,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7412,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "13822:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7437,
                        "src": "13814:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7411,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13814:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13813:15:24"
                  },
                  "returnParameters": {
                    "id": 7416,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7415,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7437,
                        "src": "13852:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint56",
                          "typeString": "uint56"
                        },
                        "typeName": {
                          "id": 7414,
                          "name": "uint56",
                          "nodeType": "ElementaryTypeName",
                          "src": "13852:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint56",
                            "typeString": "uint56"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13851:8:24"
                  },
                  "scope": 8475,
                  "src": "13796:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7464,
                    "nodeType": "Block",
                    "src": "14360:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7445,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7440,
                            "src": "14374:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7448,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14387:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint48_$",
                                    "typeString": "type(uint48)"
                                  },
                                  "typeName": {
                                    "id": 7447,
                                    "name": "uint48",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14387:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint48_$",
                                    "typeString": "type(uint48)"
                                  }
                                ],
                                "id": 7446,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "14382:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14382:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint48",
                                "typeString": "type(uint48)"
                              }
                            },
                            "id": 7450,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "14395:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "14382:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint48",
                              "typeString": "uint48"
                            }
                          },
                          "src": "14374:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7458,
                        "nodeType": "IfStatement",
                        "src": "14370:103:24",
                        "trueBody": {
                          "id": 7457,
                          "nodeType": "Block",
                          "src": "14400:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3438",
                                    "id": 7453,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14452:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    "value": "48"
                                  },
                                  {
                                    "id": 7454,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7440,
                                    "src": "14456:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7452,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "14421:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14421:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7456,
                              "nodeType": "RevertStatement",
                              "src": "14414:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7461,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7440,
                              "src": "14496:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7460,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14489:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint48_$",
                              "typeString": "type(uint48)"
                            },
                            "typeName": {
                              "id": 7459,
                              "name": "uint48",
                              "nodeType": "ElementaryTypeName",
                              "src": "14489:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14489:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          }
                        },
                        "functionReturnParameters": 7444,
                        "id": 7463,
                        "nodeType": "Return",
                        "src": "14482:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7438,
                    "nodeType": "StructuredDocumentation",
                    "src": "14015:276:24",
                    "text": " @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"
                  },
                  "id": 7465,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint48",
                  "nameLocation": "14305:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7441,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7440,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "14322:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7465,
                        "src": "14314:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7439,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14314:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14313:15:24"
                  },
                  "returnParameters": {
                    "id": 7444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7443,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7465,
                        "src": "14352:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        },
                        "typeName": {
                          "id": 7442,
                          "name": "uint48",
                          "nodeType": "ElementaryTypeName",
                          "src": "14352:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14351:8:24"
                  },
                  "scope": 8475,
                  "src": "14296:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7492,
                    "nodeType": "Block",
                    "src": "14860:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7473,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7468,
                            "src": "14874:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7476,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14887:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint40_$",
                                    "typeString": "type(uint40)"
                                  },
                                  "typeName": {
                                    "id": 7475,
                                    "name": "uint40",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14887:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint40_$",
                                    "typeString": "type(uint40)"
                                  }
                                ],
                                "id": 7474,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "14882:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14882:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint40",
                                "typeString": "type(uint40)"
                              }
                            },
                            "id": 7478,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "14895:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "14882:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          "src": "14874:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7486,
                        "nodeType": "IfStatement",
                        "src": "14870:103:24",
                        "trueBody": {
                          "id": 7485,
                          "nodeType": "Block",
                          "src": "14900:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3430",
                                    "id": 7481,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14952:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    "value": "40"
                                  },
                                  {
                                    "id": 7482,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7468,
                                    "src": "14956:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7480,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "14921:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7483,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14921:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7484,
                              "nodeType": "RevertStatement",
                              "src": "14914:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7489,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7468,
                              "src": "14996:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14989:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint40_$",
                              "typeString": "type(uint40)"
                            },
                            "typeName": {
                              "id": 7487,
                              "name": "uint40",
                              "nodeType": "ElementaryTypeName",
                              "src": "14989:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14989:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "functionReturnParameters": 7472,
                        "id": 7491,
                        "nodeType": "Return",
                        "src": "14982:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7466,
                    "nodeType": "StructuredDocumentation",
                    "src": "14515:276:24",
                    "text": " @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"
                  },
                  "id": 7493,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint40",
                  "nameLocation": "14805:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7469,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7468,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "14822:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7493,
                        "src": "14814:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7467,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14814:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14813:15:24"
                  },
                  "returnParameters": {
                    "id": 7472,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7471,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7493,
                        "src": "14852:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        "typeName": {
                          "id": 7470,
                          "name": "uint40",
                          "nodeType": "ElementaryTypeName",
                          "src": "14852:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14851:8:24"
                  },
                  "scope": 8475,
                  "src": "14796:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7520,
                    "nodeType": "Block",
                    "src": "15360:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7501,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7496,
                            "src": "15374:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7504,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15387:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint32_$",
                                    "typeString": "type(uint32)"
                                  },
                                  "typeName": {
                                    "id": 7503,
                                    "name": "uint32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15387:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint32_$",
                                    "typeString": "type(uint32)"
                                  }
                                ],
                                "id": 7502,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "15382:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15382:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint32",
                                "typeString": "type(uint32)"
                              }
                            },
                            "id": 7506,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "15395:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "15382:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "15374:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7514,
                        "nodeType": "IfStatement",
                        "src": "15370:103:24",
                        "trueBody": {
                          "id": 7513,
                          "nodeType": "Block",
                          "src": "15400:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3332",
                                    "id": 7509,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15452:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  {
                                    "id": 7510,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7496,
                                    "src": "15456:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7508,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "15421:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7511,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15421:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7512,
                              "nodeType": "RevertStatement",
                              "src": "15414:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7517,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7496,
                              "src": "15496:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15489:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint32_$",
                              "typeString": "type(uint32)"
                            },
                            "typeName": {
                              "id": 7515,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15489:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15489:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "functionReturnParameters": 7500,
                        "id": 7519,
                        "nodeType": "Return",
                        "src": "15482:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7494,
                    "nodeType": "StructuredDocumentation",
                    "src": "15015:276:24",
                    "text": " @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"
                  },
                  "id": 7521,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint32",
                  "nameLocation": "15305:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7497,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7496,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "15322:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7521,
                        "src": "15314:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7495,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15314:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15313:15:24"
                  },
                  "returnParameters": {
                    "id": 7500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7499,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7521,
                        "src": "15352:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 7498,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "15352:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15351:8:24"
                  },
                  "scope": 8475,
                  "src": "15296:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7548,
                    "nodeType": "Block",
                    "src": "15860:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7529,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7524,
                            "src": "15874:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7532,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15887:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint24_$",
                                    "typeString": "type(uint24)"
                                  },
                                  "typeName": {
                                    "id": 7531,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15887:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint24_$",
                                    "typeString": "type(uint24)"
                                  }
                                ],
                                "id": 7530,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "15882:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15882:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint24",
                                "typeString": "type(uint24)"
                              }
                            },
                            "id": 7534,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "15895:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "15882:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "src": "15874:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7542,
                        "nodeType": "IfStatement",
                        "src": "15870:103:24",
                        "trueBody": {
                          "id": 7541,
                          "nodeType": "Block",
                          "src": "15900:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3234",
                                    "id": 7537,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15952:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    "value": "24"
                                  },
                                  {
                                    "id": 7538,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7524,
                                    "src": "15956:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7536,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "15921:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15921:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7540,
                              "nodeType": "RevertStatement",
                              "src": "15914:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7545,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7524,
                              "src": "15996:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15989:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint24_$",
                              "typeString": "type(uint24)"
                            },
                            "typeName": {
                              "id": 7543,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "15989:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15989:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "functionReturnParameters": 7528,
                        "id": 7547,
                        "nodeType": "Return",
                        "src": "15982:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7522,
                    "nodeType": "StructuredDocumentation",
                    "src": "15515:276:24",
                    "text": " @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"
                  },
                  "id": 7549,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint24",
                  "nameLocation": "15805:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7525,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7524,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "15822:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7549,
                        "src": "15814:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7523,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15814:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15813:15:24"
                  },
                  "returnParameters": {
                    "id": 7528,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7527,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7549,
                        "src": "15852:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 7526,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "15852:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15851:8:24"
                  },
                  "scope": 8475,
                  "src": "15796:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7576,
                    "nodeType": "Block",
                    "src": "16360:149:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7557,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7552,
                            "src": "16374:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7560,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16387:6:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint16_$",
                                    "typeString": "type(uint16)"
                                  },
                                  "typeName": {
                                    "id": 7559,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16387:6:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint16_$",
                                    "typeString": "type(uint16)"
                                  }
                                ],
                                "id": 7558,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "16382:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7561,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16382:12:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint16",
                                "typeString": "type(uint16)"
                              }
                            },
                            "id": 7562,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "16395:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "16382:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "16374:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7570,
                        "nodeType": "IfStatement",
                        "src": "16370:103:24",
                        "trueBody": {
                          "id": 7569,
                          "nodeType": "Block",
                          "src": "16400:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3136",
                                    "id": 7565,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16452:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "value": "16"
                                  },
                                  {
                                    "id": 7566,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7552,
                                    "src": "16456:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7564,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "16421:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7567,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16421:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7568,
                              "nodeType": "RevertStatement",
                              "src": "16414:48:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7573,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7552,
                              "src": "16496:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7572,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16489:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint16_$",
                              "typeString": "type(uint16)"
                            },
                            "typeName": {
                              "id": 7571,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "16489:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16489:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "functionReturnParameters": 7556,
                        "id": 7575,
                        "nodeType": "Return",
                        "src": "16482:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7550,
                    "nodeType": "StructuredDocumentation",
                    "src": "16015:276:24",
                    "text": " @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"
                  },
                  "id": 7577,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint16",
                  "nameLocation": "16305:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7553,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7552,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "16322:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7577,
                        "src": "16314:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7551,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16314:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16313:15:24"
                  },
                  "returnParameters": {
                    "id": 7556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7555,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7577,
                        "src": "16352:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 7554,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "16352:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16351:8:24"
                  },
                  "scope": 8475,
                  "src": "16296:213:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7604,
                    "nodeType": "Block",
                    "src": "16854:146:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7585,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7580,
                            "src": "16868:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7588,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16881:5:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  },
                                  "typeName": {
                                    "id": 7587,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16881:5:24",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  }
                                ],
                                "id": 7586,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "16876:4:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7589,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16876:11:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint8",
                                "typeString": "type(uint8)"
                              }
                            },
                            "id": 7590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "16888:3:24",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "16876:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "16868:23:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7598,
                        "nodeType": "IfStatement",
                        "src": "16864:101:24",
                        "trueBody": {
                          "id": 7597,
                          "nodeType": "Block",
                          "src": "16893:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "38",
                                    "id": 7593,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16945:1:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  {
                                    "id": 7594,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7580,
                                    "src": "16948:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 7592,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6720,
                                  "src": "16914:30:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint8,uint256) pure"
                                  }
                                },
                                "id": 7595,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16914:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7596,
                              "nodeType": "RevertStatement",
                              "src": "16907:47:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7601,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7580,
                              "src": "16987:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16981:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 7599,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "16981:5:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16981:12:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 7584,
                        "id": 7603,
                        "nodeType": "Return",
                        "src": "16974:19:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7578,
                    "nodeType": "StructuredDocumentation",
                    "src": "16515:272:24",
                    "text": " @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"
                  },
                  "id": 7605,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint8",
                  "nameLocation": "16801:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7580,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "16817:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7605,
                        "src": "16809:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7579,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16809:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16808:15:24"
                  },
                  "returnParameters": {
                    "id": 7584,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7583,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7605,
                        "src": "16847:5:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 7582,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "16847:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16846:7:24"
                  },
                  "scope": 8475,
                  "src": "16792:208:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7627,
                    "nodeType": "Block",
                    "src": "17236:128:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7613,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7608,
                            "src": "17250:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 7614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17258:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "17250:9:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7621,
                        "nodeType": "IfStatement",
                        "src": "17246:81:24",
                        "trueBody": {
                          "id": 7620,
                          "nodeType": "Block",
                          "src": "17261:66:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 7617,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7608,
                                    "src": "17310:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7616,
                                  "name": "SafeCastOverflowedIntToUint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6725,
                                  "src": "17282:27:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_int256_$returns$__$",
                                    "typeString": "function (int256) pure"
                                  }
                                },
                                "id": 7618,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17282:34:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7619,
                              "nodeType": "RevertStatement",
                              "src": "17275:41:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7624,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7608,
                              "src": "17351:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 7623,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17343:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 7622,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17343:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17343:14:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7612,
                        "id": 7626,
                        "nodeType": "Return",
                        "src": "17336:21:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7606,
                    "nodeType": "StructuredDocumentation",
                    "src": "17006:160:24",
                    "text": " @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."
                  },
                  "id": 7628,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint256",
                  "nameLocation": "17180:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7609,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7608,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "17197:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7628,
                        "src": "17190:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7607,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17190:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17189:14:24"
                  },
                  "returnParameters": {
                    "id": 7612,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7611,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7628,
                        "src": "17227:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7610,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17227:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17226:9:24"
                  },
                  "scope": 8475,
                  "src": "17171:193:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7653,
                    "nodeType": "Block",
                    "src": "17761:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7636,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7634,
                            "src": "17771:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int248",
                              "typeString": "int248"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7639,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7631,
                                "src": "17791:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7638,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17784:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int248_$",
                                "typeString": "type(int248)"
                              },
                              "typeName": {
                                "id": 7637,
                                "name": "int248",
                                "nodeType": "ElementaryTypeName",
                                "src": "17784:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17784:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int248",
                              "typeString": "int248"
                            }
                          },
                          "src": "17771:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int248",
                            "typeString": "int248"
                          }
                        },
                        "id": 7642,
                        "nodeType": "ExpressionStatement",
                        "src": "17771:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7643,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7634,
                            "src": "17811:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int248",
                              "typeString": "int248"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7644,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7631,
                            "src": "17825:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "17811:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7652,
                        "nodeType": "IfStatement",
                        "src": "17807:98:24",
                        "trueBody": {
                          "id": 7651,
                          "nodeType": "Block",
                          "src": "17832:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323438",
                                    "id": 7647,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "17883:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    "value": "248"
                                  },
                                  {
                                    "id": 7648,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7631,
                                    "src": "17888:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7646,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "17853:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17853:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7650,
                              "nodeType": "RevertStatement",
                              "src": "17846:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7629,
                    "nodeType": "StructuredDocumentation",
                    "src": "17370:312:24",
                    "text": " @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"
                  },
                  "id": 7654,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt248",
                  "nameLocation": "17696:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7632,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7631,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "17712:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7654,
                        "src": "17705:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7630,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17705:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17704:14:24"
                  },
                  "returnParameters": {
                    "id": 7635,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7634,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "17749:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7654,
                        "src": "17742:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int248",
                          "typeString": "int248"
                        },
                        "typeName": {
                          "id": 7633,
                          "name": "int248",
                          "nodeType": "ElementaryTypeName",
                          "src": "17742:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int248",
                            "typeString": "int248"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17741:19:24"
                  },
                  "scope": 8475,
                  "src": "17687:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7679,
                    "nodeType": "Block",
                    "src": "18308:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7662,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7660,
                            "src": "18318:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int240",
                              "typeString": "int240"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7665,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7657,
                                "src": "18338:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7664,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18331:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int240_$",
                                "typeString": "type(int240)"
                              },
                              "typeName": {
                                "id": 7663,
                                "name": "int240",
                                "nodeType": "ElementaryTypeName",
                                "src": "18331:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18331:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int240",
                              "typeString": "int240"
                            }
                          },
                          "src": "18318:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int240",
                            "typeString": "int240"
                          }
                        },
                        "id": 7668,
                        "nodeType": "ExpressionStatement",
                        "src": "18318:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7669,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7660,
                            "src": "18358:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int240",
                              "typeString": "int240"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7670,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7657,
                            "src": "18372:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "18358:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7678,
                        "nodeType": "IfStatement",
                        "src": "18354:98:24",
                        "trueBody": {
                          "id": 7677,
                          "nodeType": "Block",
                          "src": "18379:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323430",
                                    "id": 7673,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18430:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    "value": "240"
                                  },
                                  {
                                    "id": 7674,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7657,
                                    "src": "18435:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7672,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "18400:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7675,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18400:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7676,
                              "nodeType": "RevertStatement",
                              "src": "18393:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7655,
                    "nodeType": "StructuredDocumentation",
                    "src": "17917:312:24",
                    "text": " @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"
                  },
                  "id": 7680,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt240",
                  "nameLocation": "18243:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7658,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7657,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "18259:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7680,
                        "src": "18252:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7656,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18252:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18251:14:24"
                  },
                  "returnParameters": {
                    "id": 7661,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7660,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "18296:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7680,
                        "src": "18289:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int240",
                          "typeString": "int240"
                        },
                        "typeName": {
                          "id": 7659,
                          "name": "int240",
                          "nodeType": "ElementaryTypeName",
                          "src": "18289:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int240",
                            "typeString": "int240"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18288:19:24"
                  },
                  "scope": 8475,
                  "src": "18234:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7705,
                    "nodeType": "Block",
                    "src": "18855:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7688,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7686,
                            "src": "18865:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int232",
                              "typeString": "int232"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7691,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7683,
                                "src": "18885:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18878:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int232_$",
                                "typeString": "type(int232)"
                              },
                              "typeName": {
                                "id": 7689,
                                "name": "int232",
                                "nodeType": "ElementaryTypeName",
                                "src": "18878:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7692,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18878:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int232",
                              "typeString": "int232"
                            }
                          },
                          "src": "18865:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int232",
                            "typeString": "int232"
                          }
                        },
                        "id": 7694,
                        "nodeType": "ExpressionStatement",
                        "src": "18865:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7697,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7695,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7686,
                            "src": "18905:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int232",
                              "typeString": "int232"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7696,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7683,
                            "src": "18919:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "18905:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7704,
                        "nodeType": "IfStatement",
                        "src": "18901:98:24",
                        "trueBody": {
                          "id": 7703,
                          "nodeType": "Block",
                          "src": "18926:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323332",
                                    "id": 7699,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18977:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    "value": "232"
                                  },
                                  {
                                    "id": 7700,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7683,
                                    "src": "18982:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7698,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "18947:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7701,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18947:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7702,
                              "nodeType": "RevertStatement",
                              "src": "18940:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7681,
                    "nodeType": "StructuredDocumentation",
                    "src": "18464:312:24",
                    "text": " @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"
                  },
                  "id": 7706,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt232",
                  "nameLocation": "18790:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7684,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7683,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "18806:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7706,
                        "src": "18799:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7682,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18799:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18798:14:24"
                  },
                  "returnParameters": {
                    "id": 7687,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7686,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "18843:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7706,
                        "src": "18836:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int232",
                          "typeString": "int232"
                        },
                        "typeName": {
                          "id": 7685,
                          "name": "int232",
                          "nodeType": "ElementaryTypeName",
                          "src": "18836:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int232",
                            "typeString": "int232"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18835:19:24"
                  },
                  "scope": 8475,
                  "src": "18781:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7731,
                    "nodeType": "Block",
                    "src": "19402:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7714,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7712,
                            "src": "19412:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int224",
                              "typeString": "int224"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7717,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7709,
                                "src": "19432:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7716,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19425:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int224_$",
                                "typeString": "type(int224)"
                              },
                              "typeName": {
                                "id": 7715,
                                "name": "int224",
                                "nodeType": "ElementaryTypeName",
                                "src": "19425:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7718,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19425:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int224",
                              "typeString": "int224"
                            }
                          },
                          "src": "19412:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int224",
                            "typeString": "int224"
                          }
                        },
                        "id": 7720,
                        "nodeType": "ExpressionStatement",
                        "src": "19412:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7721,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7712,
                            "src": "19452:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int224",
                              "typeString": "int224"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7722,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7709,
                            "src": "19466:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "19452:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7730,
                        "nodeType": "IfStatement",
                        "src": "19448:98:24",
                        "trueBody": {
                          "id": 7729,
                          "nodeType": "Block",
                          "src": "19473:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323234",
                                    "id": 7725,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19524:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    "value": "224"
                                  },
                                  {
                                    "id": 7726,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7709,
                                    "src": "19529:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7724,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "19494:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7727,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19494:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7728,
                              "nodeType": "RevertStatement",
                              "src": "19487:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7707,
                    "nodeType": "StructuredDocumentation",
                    "src": "19011:312:24",
                    "text": " @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"
                  },
                  "id": 7732,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt224",
                  "nameLocation": "19337:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7710,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7709,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "19353:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7732,
                        "src": "19346:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7708,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19346:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19345:14:24"
                  },
                  "returnParameters": {
                    "id": 7713,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7712,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "19390:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7732,
                        "src": "19383:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int224",
                          "typeString": "int224"
                        },
                        "typeName": {
                          "id": 7711,
                          "name": "int224",
                          "nodeType": "ElementaryTypeName",
                          "src": "19383:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int224",
                            "typeString": "int224"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19382:19:24"
                  },
                  "scope": 8475,
                  "src": "19328:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7757,
                    "nodeType": "Block",
                    "src": "19949:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7740,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7738,
                            "src": "19959:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int216",
                              "typeString": "int216"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7743,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7735,
                                "src": "19979:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19972:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int216_$",
                                "typeString": "type(int216)"
                              },
                              "typeName": {
                                "id": 7741,
                                "name": "int216",
                                "nodeType": "ElementaryTypeName",
                                "src": "19972:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19972:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int216",
                              "typeString": "int216"
                            }
                          },
                          "src": "19959:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int216",
                            "typeString": "int216"
                          }
                        },
                        "id": 7746,
                        "nodeType": "ExpressionStatement",
                        "src": "19959:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7747,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7738,
                            "src": "19999:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int216",
                              "typeString": "int216"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7748,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7735,
                            "src": "20013:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "19999:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7756,
                        "nodeType": "IfStatement",
                        "src": "19995:98:24",
                        "trueBody": {
                          "id": 7755,
                          "nodeType": "Block",
                          "src": "20020:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323136",
                                    "id": 7751,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20071:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    "value": "216"
                                  },
                                  {
                                    "id": 7752,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7735,
                                    "src": "20076:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7750,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "20041:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20041:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7754,
                              "nodeType": "RevertStatement",
                              "src": "20034:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7733,
                    "nodeType": "StructuredDocumentation",
                    "src": "19558:312:24",
                    "text": " @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"
                  },
                  "id": 7758,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt216",
                  "nameLocation": "19884:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7736,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7735,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "19900:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7758,
                        "src": "19893:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7734,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19893:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19892:14:24"
                  },
                  "returnParameters": {
                    "id": 7739,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7738,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "19937:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7758,
                        "src": "19930:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int216",
                          "typeString": "int216"
                        },
                        "typeName": {
                          "id": 7737,
                          "name": "int216",
                          "nodeType": "ElementaryTypeName",
                          "src": "19930:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int216",
                            "typeString": "int216"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19929:19:24"
                  },
                  "scope": 8475,
                  "src": "19875:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7783,
                    "nodeType": "Block",
                    "src": "20496:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7766,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7764,
                            "src": "20506:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int208",
                              "typeString": "int208"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7769,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7761,
                                "src": "20526:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "20519:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int208_$",
                                "typeString": "type(int208)"
                              },
                              "typeName": {
                                "id": 7767,
                                "name": "int208",
                                "nodeType": "ElementaryTypeName",
                                "src": "20519:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20519:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int208",
                              "typeString": "int208"
                            }
                          },
                          "src": "20506:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int208",
                            "typeString": "int208"
                          }
                        },
                        "id": 7772,
                        "nodeType": "ExpressionStatement",
                        "src": "20506:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7773,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7764,
                            "src": "20546:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int208",
                              "typeString": "int208"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7774,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7761,
                            "src": "20560:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "20546:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7782,
                        "nodeType": "IfStatement",
                        "src": "20542:98:24",
                        "trueBody": {
                          "id": 7781,
                          "nodeType": "Block",
                          "src": "20567:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323038",
                                    "id": 7777,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20618:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    "value": "208"
                                  },
                                  {
                                    "id": 7778,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7761,
                                    "src": "20623:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7776,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "20588:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20588:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7780,
                              "nodeType": "RevertStatement",
                              "src": "20581:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7759,
                    "nodeType": "StructuredDocumentation",
                    "src": "20105:312:24",
                    "text": " @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"
                  },
                  "id": 7784,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt208",
                  "nameLocation": "20431:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7762,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7761,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "20447:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7784,
                        "src": "20440:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7760,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20440:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20439:14:24"
                  },
                  "returnParameters": {
                    "id": 7765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7764,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "20484:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7784,
                        "src": "20477:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int208",
                          "typeString": "int208"
                        },
                        "typeName": {
                          "id": 7763,
                          "name": "int208",
                          "nodeType": "ElementaryTypeName",
                          "src": "20477:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int208",
                            "typeString": "int208"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20476:19:24"
                  },
                  "scope": 8475,
                  "src": "20422:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7809,
                    "nodeType": "Block",
                    "src": "21043:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7792,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7790,
                            "src": "21053:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int200",
                              "typeString": "int200"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7795,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7787,
                                "src": "21073:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7794,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21066:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int200_$",
                                "typeString": "type(int200)"
                              },
                              "typeName": {
                                "id": 7793,
                                "name": "int200",
                                "nodeType": "ElementaryTypeName",
                                "src": "21066:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21066:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int200",
                              "typeString": "int200"
                            }
                          },
                          "src": "21053:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int200",
                            "typeString": "int200"
                          }
                        },
                        "id": 7798,
                        "nodeType": "ExpressionStatement",
                        "src": "21053:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7799,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7790,
                            "src": "21093:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int200",
                              "typeString": "int200"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7800,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7787,
                            "src": "21107:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "21093:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7808,
                        "nodeType": "IfStatement",
                        "src": "21089:98:24",
                        "trueBody": {
                          "id": 7807,
                          "nodeType": "Block",
                          "src": "21114:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323030",
                                    "id": 7803,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21165:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    "value": "200"
                                  },
                                  {
                                    "id": 7804,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7787,
                                    "src": "21170:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7802,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "21135:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7805,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21135:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7806,
                              "nodeType": "RevertStatement",
                              "src": "21128:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7785,
                    "nodeType": "StructuredDocumentation",
                    "src": "20652:312:24",
                    "text": " @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"
                  },
                  "id": 7810,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt200",
                  "nameLocation": "20978:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7788,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7787,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "20994:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7810,
                        "src": "20987:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7786,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20987:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20986:14:24"
                  },
                  "returnParameters": {
                    "id": 7791,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7790,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "21031:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7810,
                        "src": "21024:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int200",
                          "typeString": "int200"
                        },
                        "typeName": {
                          "id": 7789,
                          "name": "int200",
                          "nodeType": "ElementaryTypeName",
                          "src": "21024:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int200",
                            "typeString": "int200"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21023:19:24"
                  },
                  "scope": 8475,
                  "src": "20969:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7835,
                    "nodeType": "Block",
                    "src": "21590:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7818,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7816,
                            "src": "21600:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int192",
                              "typeString": "int192"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7821,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7813,
                                "src": "21620:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21613:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int192_$",
                                "typeString": "type(int192)"
                              },
                              "typeName": {
                                "id": 7819,
                                "name": "int192",
                                "nodeType": "ElementaryTypeName",
                                "src": "21613:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21613:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int192",
                              "typeString": "int192"
                            }
                          },
                          "src": "21600:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int192",
                            "typeString": "int192"
                          }
                        },
                        "id": 7824,
                        "nodeType": "ExpressionStatement",
                        "src": "21600:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7825,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7816,
                            "src": "21640:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int192",
                              "typeString": "int192"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7826,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7813,
                            "src": "21654:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "21640:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7834,
                        "nodeType": "IfStatement",
                        "src": "21636:98:24",
                        "trueBody": {
                          "id": 7833,
                          "nodeType": "Block",
                          "src": "21661:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313932",
                                    "id": 7829,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21712:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  {
                                    "id": 7830,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7813,
                                    "src": "21717:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7828,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "21682:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7831,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21682:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7832,
                              "nodeType": "RevertStatement",
                              "src": "21675:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7811,
                    "nodeType": "StructuredDocumentation",
                    "src": "21199:312:24",
                    "text": " @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"
                  },
                  "id": 7836,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt192",
                  "nameLocation": "21525:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7814,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7813,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "21541:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7836,
                        "src": "21534:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7812,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21534:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21533:14:24"
                  },
                  "returnParameters": {
                    "id": 7817,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7816,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "21578:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7836,
                        "src": "21571:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int192",
                          "typeString": "int192"
                        },
                        "typeName": {
                          "id": 7815,
                          "name": "int192",
                          "nodeType": "ElementaryTypeName",
                          "src": "21571:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int192",
                            "typeString": "int192"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21570:19:24"
                  },
                  "scope": 8475,
                  "src": "21516:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7861,
                    "nodeType": "Block",
                    "src": "22137:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7844,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7842,
                            "src": "22147:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int184",
                              "typeString": "int184"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7847,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7839,
                                "src": "22167:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22160:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int184_$",
                                "typeString": "type(int184)"
                              },
                              "typeName": {
                                "id": 7845,
                                "name": "int184",
                                "nodeType": "ElementaryTypeName",
                                "src": "22160:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7848,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22160:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int184",
                              "typeString": "int184"
                            }
                          },
                          "src": "22147:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int184",
                            "typeString": "int184"
                          }
                        },
                        "id": 7850,
                        "nodeType": "ExpressionStatement",
                        "src": "22147:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7853,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7851,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7842,
                            "src": "22187:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int184",
                              "typeString": "int184"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7852,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7839,
                            "src": "22201:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "22187:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7860,
                        "nodeType": "IfStatement",
                        "src": "22183:98:24",
                        "trueBody": {
                          "id": 7859,
                          "nodeType": "Block",
                          "src": "22208:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313834",
                                    "id": 7855,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22259:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    "value": "184"
                                  },
                                  {
                                    "id": 7856,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7839,
                                    "src": "22264:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7854,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "22229:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7857,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22229:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7858,
                              "nodeType": "RevertStatement",
                              "src": "22222:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7837,
                    "nodeType": "StructuredDocumentation",
                    "src": "21746:312:24",
                    "text": " @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"
                  },
                  "id": 7862,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt184",
                  "nameLocation": "22072:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7839,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "22088:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7862,
                        "src": "22081:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7838,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22081:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22080:14:24"
                  },
                  "returnParameters": {
                    "id": 7843,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7842,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "22125:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7862,
                        "src": "22118:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int184",
                          "typeString": "int184"
                        },
                        "typeName": {
                          "id": 7841,
                          "name": "int184",
                          "nodeType": "ElementaryTypeName",
                          "src": "22118:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int184",
                            "typeString": "int184"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22117:19:24"
                  },
                  "scope": 8475,
                  "src": "22063:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7887,
                    "nodeType": "Block",
                    "src": "22684:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7875,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7870,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7868,
                            "src": "22694:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int176",
                              "typeString": "int176"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7873,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7865,
                                "src": "22714:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7872,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22707:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int176_$",
                                "typeString": "type(int176)"
                              },
                              "typeName": {
                                "id": 7871,
                                "name": "int176",
                                "nodeType": "ElementaryTypeName",
                                "src": "22707:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7874,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22707:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int176",
                              "typeString": "int176"
                            }
                          },
                          "src": "22694:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int176",
                            "typeString": "int176"
                          }
                        },
                        "id": 7876,
                        "nodeType": "ExpressionStatement",
                        "src": "22694:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7877,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7868,
                            "src": "22734:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int176",
                              "typeString": "int176"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7878,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7865,
                            "src": "22748:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "22734:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7886,
                        "nodeType": "IfStatement",
                        "src": "22730:98:24",
                        "trueBody": {
                          "id": 7885,
                          "nodeType": "Block",
                          "src": "22755:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313736",
                                    "id": 7881,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22806:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    "value": "176"
                                  },
                                  {
                                    "id": 7882,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7865,
                                    "src": "22811:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7880,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "22776:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7883,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22776:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7884,
                              "nodeType": "RevertStatement",
                              "src": "22769:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7863,
                    "nodeType": "StructuredDocumentation",
                    "src": "22293:312:24",
                    "text": " @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"
                  },
                  "id": 7888,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt176",
                  "nameLocation": "22619:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7866,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7865,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "22635:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7888,
                        "src": "22628:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7864,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22628:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22627:14:24"
                  },
                  "returnParameters": {
                    "id": 7869,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7868,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "22672:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7888,
                        "src": "22665:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int176",
                          "typeString": "int176"
                        },
                        "typeName": {
                          "id": 7867,
                          "name": "int176",
                          "nodeType": "ElementaryTypeName",
                          "src": "22665:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int176",
                            "typeString": "int176"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22664:19:24"
                  },
                  "scope": 8475,
                  "src": "22610:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7913,
                    "nodeType": "Block",
                    "src": "23231:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7896,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7894,
                            "src": "23241:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int168",
                              "typeString": "int168"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7899,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7891,
                                "src": "23261:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "23254:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int168_$",
                                "typeString": "type(int168)"
                              },
                              "typeName": {
                                "id": 7897,
                                "name": "int168",
                                "nodeType": "ElementaryTypeName",
                                "src": "23254:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23254:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int168",
                              "typeString": "int168"
                            }
                          },
                          "src": "23241:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int168",
                            "typeString": "int168"
                          }
                        },
                        "id": 7902,
                        "nodeType": "ExpressionStatement",
                        "src": "23241:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7903,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7894,
                            "src": "23281:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int168",
                              "typeString": "int168"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7904,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7891,
                            "src": "23295:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "23281:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7912,
                        "nodeType": "IfStatement",
                        "src": "23277:98:24",
                        "trueBody": {
                          "id": 7911,
                          "nodeType": "Block",
                          "src": "23302:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313638",
                                    "id": 7907,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "23353:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    "value": "168"
                                  },
                                  {
                                    "id": 7908,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7891,
                                    "src": "23358:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7906,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "23323:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7909,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23323:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7910,
                              "nodeType": "RevertStatement",
                              "src": "23316:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7889,
                    "nodeType": "StructuredDocumentation",
                    "src": "22840:312:24",
                    "text": " @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"
                  },
                  "id": 7914,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt168",
                  "nameLocation": "23166:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7892,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7891,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "23182:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7914,
                        "src": "23175:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7890,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23175:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23174:14:24"
                  },
                  "returnParameters": {
                    "id": 7895,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7894,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "23219:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7914,
                        "src": "23212:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int168",
                          "typeString": "int168"
                        },
                        "typeName": {
                          "id": 7893,
                          "name": "int168",
                          "nodeType": "ElementaryTypeName",
                          "src": "23212:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int168",
                            "typeString": "int168"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23211:19:24"
                  },
                  "scope": 8475,
                  "src": "23157:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7939,
                    "nodeType": "Block",
                    "src": "23778:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7922,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7920,
                            "src": "23788:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int160",
                              "typeString": "int160"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7925,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7917,
                                "src": "23808:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "23801:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int160_$",
                                "typeString": "type(int160)"
                              },
                              "typeName": {
                                "id": 7923,
                                "name": "int160",
                                "nodeType": "ElementaryTypeName",
                                "src": "23801:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23801:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int160",
                              "typeString": "int160"
                            }
                          },
                          "src": "23788:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int160",
                            "typeString": "int160"
                          }
                        },
                        "id": 7928,
                        "nodeType": "ExpressionStatement",
                        "src": "23788:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7929,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7920,
                            "src": "23828:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int160",
                              "typeString": "int160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7930,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7917,
                            "src": "23842:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "23828:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7938,
                        "nodeType": "IfStatement",
                        "src": "23824:98:24",
                        "trueBody": {
                          "id": 7937,
                          "nodeType": "Block",
                          "src": "23849:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313630",
                                    "id": 7933,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "23900:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    "value": "160"
                                  },
                                  {
                                    "id": 7934,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7917,
                                    "src": "23905:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7932,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "23870:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7935,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23870:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7936,
                              "nodeType": "RevertStatement",
                              "src": "23863:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7915,
                    "nodeType": "StructuredDocumentation",
                    "src": "23387:312:24",
                    "text": " @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"
                  },
                  "id": 7940,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt160",
                  "nameLocation": "23713:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7918,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7917,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "23729:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7940,
                        "src": "23722:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7916,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23722:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23721:14:24"
                  },
                  "returnParameters": {
                    "id": 7921,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7920,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "23766:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7940,
                        "src": "23759:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int160",
                          "typeString": "int160"
                        },
                        "typeName": {
                          "id": 7919,
                          "name": "int160",
                          "nodeType": "ElementaryTypeName",
                          "src": "23759:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int160",
                            "typeString": "int160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23758:19:24"
                  },
                  "scope": 8475,
                  "src": "23704:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7965,
                    "nodeType": "Block",
                    "src": "24325:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7948,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7946,
                            "src": "24335:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int152",
                              "typeString": "int152"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7951,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7943,
                                "src": "24355:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "24348:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int152_$",
                                "typeString": "type(int152)"
                              },
                              "typeName": {
                                "id": 7949,
                                "name": "int152",
                                "nodeType": "ElementaryTypeName",
                                "src": "24348:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24348:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int152",
                              "typeString": "int152"
                            }
                          },
                          "src": "24335:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int152",
                            "typeString": "int152"
                          }
                        },
                        "id": 7954,
                        "nodeType": "ExpressionStatement",
                        "src": "24335:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7955,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7946,
                            "src": "24375:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int152",
                              "typeString": "int152"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7956,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7943,
                            "src": "24389:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "24375:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7964,
                        "nodeType": "IfStatement",
                        "src": "24371:98:24",
                        "trueBody": {
                          "id": 7963,
                          "nodeType": "Block",
                          "src": "24396:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313532",
                                    "id": 7959,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "24447:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    "value": "152"
                                  },
                                  {
                                    "id": 7960,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7943,
                                    "src": "24452:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7958,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "24417:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7961,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24417:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7962,
                              "nodeType": "RevertStatement",
                              "src": "24410:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7941,
                    "nodeType": "StructuredDocumentation",
                    "src": "23934:312:24",
                    "text": " @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"
                  },
                  "id": 7966,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt152",
                  "nameLocation": "24260:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7943,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "24276:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7966,
                        "src": "24269:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7942,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24269:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24268:14:24"
                  },
                  "returnParameters": {
                    "id": 7947,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7946,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "24313:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7966,
                        "src": "24306:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int152",
                          "typeString": "int152"
                        },
                        "typeName": {
                          "id": 7945,
                          "name": "int152",
                          "nodeType": "ElementaryTypeName",
                          "src": "24306:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int152",
                            "typeString": "int152"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24305:19:24"
                  },
                  "scope": 8475,
                  "src": "24251:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7991,
                    "nodeType": "Block",
                    "src": "24872:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 7979,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7974,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7972,
                            "src": "24882:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int144",
                              "typeString": "int144"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7977,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7969,
                                "src": "24902:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 7976,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "24895:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int144_$",
                                "typeString": "type(int144)"
                              },
                              "typeName": {
                                "id": 7975,
                                "name": "int144",
                                "nodeType": "ElementaryTypeName",
                                "src": "24895:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24895:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int144",
                              "typeString": "int144"
                            }
                          },
                          "src": "24882:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int144",
                            "typeString": "int144"
                          }
                        },
                        "id": 7980,
                        "nodeType": "ExpressionStatement",
                        "src": "24882:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 7983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7981,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7972,
                            "src": "24922:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int144",
                              "typeString": "int144"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 7982,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7969,
                            "src": "24936:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "24922:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7990,
                        "nodeType": "IfStatement",
                        "src": "24918:98:24",
                        "trueBody": {
                          "id": 7989,
                          "nodeType": "Block",
                          "src": "24943:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313434",
                                    "id": 7985,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "24994:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    "value": "144"
                                  },
                                  {
                                    "id": 7986,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7969,
                                    "src": "24999:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 7984,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "24964:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 7987,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24964:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7988,
                              "nodeType": "RevertStatement",
                              "src": "24957:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7967,
                    "nodeType": "StructuredDocumentation",
                    "src": "24481:312:24",
                    "text": " @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"
                  },
                  "id": 7992,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt144",
                  "nameLocation": "24807:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7970,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7969,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "24823:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7992,
                        "src": "24816:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7968,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24816:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24815:14:24"
                  },
                  "returnParameters": {
                    "id": 7973,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7972,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "24860:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 7992,
                        "src": "24853:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int144",
                          "typeString": "int144"
                        },
                        "typeName": {
                          "id": 7971,
                          "name": "int144",
                          "nodeType": "ElementaryTypeName",
                          "src": "24853:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int144",
                            "typeString": "int144"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24852:19:24"
                  },
                  "scope": 8475,
                  "src": "24798:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8017,
                    "nodeType": "Block",
                    "src": "25419:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8000,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7998,
                            "src": "25429:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int136",
                              "typeString": "int136"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8003,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7995,
                                "src": "25449:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25442:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int136_$",
                                "typeString": "type(int136)"
                              },
                              "typeName": {
                                "id": 8001,
                                "name": "int136",
                                "nodeType": "ElementaryTypeName",
                                "src": "25442:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25442:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int136",
                              "typeString": "int136"
                            }
                          },
                          "src": "25429:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int136",
                            "typeString": "int136"
                          }
                        },
                        "id": 8006,
                        "nodeType": "ExpressionStatement",
                        "src": "25429:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8007,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7998,
                            "src": "25469:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int136",
                              "typeString": "int136"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8008,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7995,
                            "src": "25483:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "25469:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8016,
                        "nodeType": "IfStatement",
                        "src": "25465:98:24",
                        "trueBody": {
                          "id": 8015,
                          "nodeType": "Block",
                          "src": "25490:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313336",
                                    "id": 8011,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "25541:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    "value": "136"
                                  },
                                  {
                                    "id": 8012,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7995,
                                    "src": "25546:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8010,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "25511:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8013,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25511:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8014,
                              "nodeType": "RevertStatement",
                              "src": "25504:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7993,
                    "nodeType": "StructuredDocumentation",
                    "src": "25028:312:24",
                    "text": " @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"
                  },
                  "id": 8018,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt136",
                  "nameLocation": "25354:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7996,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7995,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "25370:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8018,
                        "src": "25363:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7994,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25363:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25362:14:24"
                  },
                  "returnParameters": {
                    "id": 7999,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7998,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "25407:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8018,
                        "src": "25400:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int136",
                          "typeString": "int136"
                        },
                        "typeName": {
                          "id": 7997,
                          "name": "int136",
                          "nodeType": "ElementaryTypeName",
                          "src": "25400:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int136",
                            "typeString": "int136"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25399:19:24"
                  },
                  "scope": 8475,
                  "src": "25345:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8043,
                    "nodeType": "Block",
                    "src": "25966:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8026,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8024,
                            "src": "25976:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int128",
                              "typeString": "int128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8029,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8021,
                                "src": "25996:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25989:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int128_$",
                                "typeString": "type(int128)"
                              },
                              "typeName": {
                                "id": 8027,
                                "name": "int128",
                                "nodeType": "ElementaryTypeName",
                                "src": "25989:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25989:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int128",
                              "typeString": "int128"
                            }
                          },
                          "src": "25976:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "id": 8032,
                        "nodeType": "ExpressionStatement",
                        "src": "25976:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8033,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8024,
                            "src": "26016:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int128",
                              "typeString": "int128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8034,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8021,
                            "src": "26030:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "26016:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8042,
                        "nodeType": "IfStatement",
                        "src": "26012:98:24",
                        "trueBody": {
                          "id": 8041,
                          "nodeType": "Block",
                          "src": "26037:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313238",
                                    "id": 8037,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26088:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  {
                                    "id": 8038,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8021,
                                    "src": "26093:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8036,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "26058:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8039,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26058:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8040,
                              "nodeType": "RevertStatement",
                              "src": "26051:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8019,
                    "nodeType": "StructuredDocumentation",
                    "src": "25575:312:24",
                    "text": " @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"
                  },
                  "id": 8044,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt128",
                  "nameLocation": "25901:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8022,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8021,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "25917:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8044,
                        "src": "25910:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8020,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25910:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25909:14:24"
                  },
                  "returnParameters": {
                    "id": 8025,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8024,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "25954:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8044,
                        "src": "25947:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        },
                        "typeName": {
                          "id": 8023,
                          "name": "int128",
                          "nodeType": "ElementaryTypeName",
                          "src": "25947:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25946:19:24"
                  },
                  "scope": 8475,
                  "src": "25892:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8069,
                    "nodeType": "Block",
                    "src": "26513:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8057,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8052,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8050,
                            "src": "26523:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int120",
                              "typeString": "int120"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8055,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8047,
                                "src": "26543:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8054,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "26536:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int120_$",
                                "typeString": "type(int120)"
                              },
                              "typeName": {
                                "id": 8053,
                                "name": "int120",
                                "nodeType": "ElementaryTypeName",
                                "src": "26536:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8056,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26536:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int120",
                              "typeString": "int120"
                            }
                          },
                          "src": "26523:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int120",
                            "typeString": "int120"
                          }
                        },
                        "id": 8058,
                        "nodeType": "ExpressionStatement",
                        "src": "26523:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8059,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8050,
                            "src": "26563:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int120",
                              "typeString": "int120"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8060,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8047,
                            "src": "26577:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "26563:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8068,
                        "nodeType": "IfStatement",
                        "src": "26559:98:24",
                        "trueBody": {
                          "id": 8067,
                          "nodeType": "Block",
                          "src": "26584:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313230",
                                    "id": 8063,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26635:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    "value": "120"
                                  },
                                  {
                                    "id": 8064,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8047,
                                    "src": "26640:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8062,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "26605:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8065,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26605:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8066,
                              "nodeType": "RevertStatement",
                              "src": "26598:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8045,
                    "nodeType": "StructuredDocumentation",
                    "src": "26122:312:24",
                    "text": " @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"
                  },
                  "id": 8070,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt120",
                  "nameLocation": "26448:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8048,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8047,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "26464:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8070,
                        "src": "26457:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8046,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26457:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26456:14:24"
                  },
                  "returnParameters": {
                    "id": 8051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8050,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "26501:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8070,
                        "src": "26494:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int120",
                          "typeString": "int120"
                        },
                        "typeName": {
                          "id": 8049,
                          "name": "int120",
                          "nodeType": "ElementaryTypeName",
                          "src": "26494:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int120",
                            "typeString": "int120"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26493:19:24"
                  },
                  "scope": 8475,
                  "src": "26439:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8095,
                    "nodeType": "Block",
                    "src": "27060:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8078,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8076,
                            "src": "27070:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int112",
                              "typeString": "int112"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8081,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8073,
                                "src": "27090:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "27083:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int112_$",
                                "typeString": "type(int112)"
                              },
                              "typeName": {
                                "id": 8079,
                                "name": "int112",
                                "nodeType": "ElementaryTypeName",
                                "src": "27083:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8082,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27083:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int112",
                              "typeString": "int112"
                            }
                          },
                          "src": "27070:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int112",
                            "typeString": "int112"
                          }
                        },
                        "id": 8084,
                        "nodeType": "ExpressionStatement",
                        "src": "27070:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8085,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8076,
                            "src": "27110:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int112",
                              "typeString": "int112"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8086,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8073,
                            "src": "27124:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "27110:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8094,
                        "nodeType": "IfStatement",
                        "src": "27106:98:24",
                        "trueBody": {
                          "id": 8093,
                          "nodeType": "Block",
                          "src": "27131:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313132",
                                    "id": 8089,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27182:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    "value": "112"
                                  },
                                  {
                                    "id": 8090,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8073,
                                    "src": "27187:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8088,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "27152:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8091,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27152:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8092,
                              "nodeType": "RevertStatement",
                              "src": "27145:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8071,
                    "nodeType": "StructuredDocumentation",
                    "src": "26669:312:24",
                    "text": " @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"
                  },
                  "id": 8096,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt112",
                  "nameLocation": "26995:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8074,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8073,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "27011:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8096,
                        "src": "27004:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8072,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27004:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27003:14:24"
                  },
                  "returnParameters": {
                    "id": 8077,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8076,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "27048:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8096,
                        "src": "27041:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int112",
                          "typeString": "int112"
                        },
                        "typeName": {
                          "id": 8075,
                          "name": "int112",
                          "nodeType": "ElementaryTypeName",
                          "src": "27041:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int112",
                            "typeString": "int112"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27040:19:24"
                  },
                  "scope": 8475,
                  "src": "26986:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8121,
                    "nodeType": "Block",
                    "src": "27607:150:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8104,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8102,
                            "src": "27617:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int104",
                              "typeString": "int104"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8107,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8099,
                                "src": "27637:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8106,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "27630:6:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int104_$",
                                "typeString": "type(int104)"
                              },
                              "typeName": {
                                "id": 8105,
                                "name": "int104",
                                "nodeType": "ElementaryTypeName",
                                "src": "27630:6:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27630:13:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int104",
                              "typeString": "int104"
                            }
                          },
                          "src": "27617:26:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int104",
                            "typeString": "int104"
                          }
                        },
                        "id": 8110,
                        "nodeType": "ExpressionStatement",
                        "src": "27617:26:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8111,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8102,
                            "src": "27657:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int104",
                              "typeString": "int104"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8112,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8099,
                            "src": "27671:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "27657:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8120,
                        "nodeType": "IfStatement",
                        "src": "27653:98:24",
                        "trueBody": {
                          "id": 8119,
                          "nodeType": "Block",
                          "src": "27678:73:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313034",
                                    "id": 8115,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27729:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    "value": "104"
                                  },
                                  {
                                    "id": 8116,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8099,
                                    "src": "27734:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8114,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "27699:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8117,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27699:41:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8118,
                              "nodeType": "RevertStatement",
                              "src": "27692:48:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8097,
                    "nodeType": "StructuredDocumentation",
                    "src": "27216:312:24",
                    "text": " @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"
                  },
                  "id": 8122,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt104",
                  "nameLocation": "27542:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8099,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "27558:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8122,
                        "src": "27551:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8098,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27551:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27550:14:24"
                  },
                  "returnParameters": {
                    "id": 8103,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8102,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "27595:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8122,
                        "src": "27588:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int104",
                          "typeString": "int104"
                        },
                        "typeName": {
                          "id": 8101,
                          "name": "int104",
                          "nodeType": "ElementaryTypeName",
                          "src": "27588:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int104",
                            "typeString": "int104"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27587:19:24"
                  },
                  "scope": 8475,
                  "src": "27533:224:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8147,
                    "nodeType": "Block",
                    "src": "28147:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8130,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8128,
                            "src": "28157:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int96",
                              "typeString": "int96"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8133,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8125,
                                "src": "28176:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "28170:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int96_$",
                                "typeString": "type(int96)"
                              },
                              "typeName": {
                                "id": 8131,
                                "name": "int96",
                                "nodeType": "ElementaryTypeName",
                                "src": "28170:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28170:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int96",
                              "typeString": "int96"
                            }
                          },
                          "src": "28157:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int96",
                            "typeString": "int96"
                          }
                        },
                        "id": 8136,
                        "nodeType": "ExpressionStatement",
                        "src": "28157:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8137,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8128,
                            "src": "28196:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int96",
                              "typeString": "int96"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8138,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8125,
                            "src": "28210:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "28196:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8146,
                        "nodeType": "IfStatement",
                        "src": "28192:97:24",
                        "trueBody": {
                          "id": 8145,
                          "nodeType": "Block",
                          "src": "28217:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3936",
                                    "id": 8141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "28268:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  {
                                    "id": 8142,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8125,
                                    "src": "28272:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8140,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "28238:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8143,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28238:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8144,
                              "nodeType": "RevertStatement",
                              "src": "28231:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8123,
                    "nodeType": "StructuredDocumentation",
                    "src": "27763:307:24",
                    "text": " @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"
                  },
                  "id": 8148,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt96",
                  "nameLocation": "28084:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8125,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "28099:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8148,
                        "src": "28092:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8124,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28092:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28091:14:24"
                  },
                  "returnParameters": {
                    "id": 8129,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8128,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "28135:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8148,
                        "src": "28129:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int96",
                          "typeString": "int96"
                        },
                        "typeName": {
                          "id": 8127,
                          "name": "int96",
                          "nodeType": "ElementaryTypeName",
                          "src": "28129:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int96",
                            "typeString": "int96"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28128:18:24"
                  },
                  "scope": 8475,
                  "src": "28075:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8173,
                    "nodeType": "Block",
                    "src": "28685:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8156,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8154,
                            "src": "28695:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int88",
                              "typeString": "int88"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8159,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8151,
                                "src": "28714:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8158,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "28708:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int88_$",
                                "typeString": "type(int88)"
                              },
                              "typeName": {
                                "id": 8157,
                                "name": "int88",
                                "nodeType": "ElementaryTypeName",
                                "src": "28708:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8160,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28708:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int88",
                              "typeString": "int88"
                            }
                          },
                          "src": "28695:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int88",
                            "typeString": "int88"
                          }
                        },
                        "id": 8162,
                        "nodeType": "ExpressionStatement",
                        "src": "28695:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8163,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8154,
                            "src": "28734:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int88",
                              "typeString": "int88"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8164,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8151,
                            "src": "28748:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "28734:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8172,
                        "nodeType": "IfStatement",
                        "src": "28730:97:24",
                        "trueBody": {
                          "id": 8171,
                          "nodeType": "Block",
                          "src": "28755:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3838",
                                    "id": 8167,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "28806:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    "value": "88"
                                  },
                                  {
                                    "id": 8168,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8151,
                                    "src": "28810:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8166,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "28776:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8169,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28776:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8170,
                              "nodeType": "RevertStatement",
                              "src": "28769:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8149,
                    "nodeType": "StructuredDocumentation",
                    "src": "28301:307:24",
                    "text": " @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"
                  },
                  "id": 8174,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt88",
                  "nameLocation": "28622:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8152,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8151,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "28637:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8174,
                        "src": "28630:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8150,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28630:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28629:14:24"
                  },
                  "returnParameters": {
                    "id": 8155,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8154,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "28673:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8174,
                        "src": "28667:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int88",
                          "typeString": "int88"
                        },
                        "typeName": {
                          "id": 8153,
                          "name": "int88",
                          "nodeType": "ElementaryTypeName",
                          "src": "28667:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int88",
                            "typeString": "int88"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28666:18:24"
                  },
                  "scope": 8475,
                  "src": "28613:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8199,
                    "nodeType": "Block",
                    "src": "29223:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8182,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8180,
                            "src": "29233:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int80",
                              "typeString": "int80"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8185,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8177,
                                "src": "29252:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "29246:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int80_$",
                                "typeString": "type(int80)"
                              },
                              "typeName": {
                                "id": 8183,
                                "name": "int80",
                                "nodeType": "ElementaryTypeName",
                                "src": "29246:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8186,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29246:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int80",
                              "typeString": "int80"
                            }
                          },
                          "src": "29233:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int80",
                            "typeString": "int80"
                          }
                        },
                        "id": 8188,
                        "nodeType": "ExpressionStatement",
                        "src": "29233:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8189,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8180,
                            "src": "29272:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int80",
                              "typeString": "int80"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8190,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8177,
                            "src": "29286:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "29272:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8198,
                        "nodeType": "IfStatement",
                        "src": "29268:97:24",
                        "trueBody": {
                          "id": 8197,
                          "nodeType": "Block",
                          "src": "29293:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3830",
                                    "id": 8193,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "29344:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    "value": "80"
                                  },
                                  {
                                    "id": 8194,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8177,
                                    "src": "29348:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8192,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "29314:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8195,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29314:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8196,
                              "nodeType": "RevertStatement",
                              "src": "29307:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8175,
                    "nodeType": "StructuredDocumentation",
                    "src": "28839:307:24",
                    "text": " @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"
                  },
                  "id": 8200,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt80",
                  "nameLocation": "29160:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8178,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8177,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "29175:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8200,
                        "src": "29168:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8176,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29168:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29167:14:24"
                  },
                  "returnParameters": {
                    "id": 8181,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8180,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "29211:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8200,
                        "src": "29205:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int80",
                          "typeString": "int80"
                        },
                        "typeName": {
                          "id": 8179,
                          "name": "int80",
                          "nodeType": "ElementaryTypeName",
                          "src": "29205:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int80",
                            "typeString": "int80"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29204:18:24"
                  },
                  "scope": 8475,
                  "src": "29151:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8225,
                    "nodeType": "Block",
                    "src": "29761:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8208,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8206,
                            "src": "29771:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int72",
                              "typeString": "int72"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8211,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8203,
                                "src": "29790:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "29784:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int72_$",
                                "typeString": "type(int72)"
                              },
                              "typeName": {
                                "id": 8209,
                                "name": "int72",
                                "nodeType": "ElementaryTypeName",
                                "src": "29784:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29784:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int72",
                              "typeString": "int72"
                            }
                          },
                          "src": "29771:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int72",
                            "typeString": "int72"
                          }
                        },
                        "id": 8214,
                        "nodeType": "ExpressionStatement",
                        "src": "29771:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8217,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8215,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8206,
                            "src": "29810:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int72",
                              "typeString": "int72"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8216,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8203,
                            "src": "29824:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "29810:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8224,
                        "nodeType": "IfStatement",
                        "src": "29806:97:24",
                        "trueBody": {
                          "id": 8223,
                          "nodeType": "Block",
                          "src": "29831:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3732",
                                    "id": 8219,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "29882:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    "value": "72"
                                  },
                                  {
                                    "id": 8220,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8203,
                                    "src": "29886:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8218,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "29852:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29852:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8222,
                              "nodeType": "RevertStatement",
                              "src": "29845:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8201,
                    "nodeType": "StructuredDocumentation",
                    "src": "29377:307:24",
                    "text": " @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"
                  },
                  "id": 8226,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt72",
                  "nameLocation": "29698:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8204,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8203,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "29713:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8226,
                        "src": "29706:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8202,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29706:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29705:14:24"
                  },
                  "returnParameters": {
                    "id": 8207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8206,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "29749:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8226,
                        "src": "29743:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int72",
                          "typeString": "int72"
                        },
                        "typeName": {
                          "id": 8205,
                          "name": "int72",
                          "nodeType": "ElementaryTypeName",
                          "src": "29743:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int72",
                            "typeString": "int72"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29742:18:24"
                  },
                  "scope": 8475,
                  "src": "29689:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8251,
                    "nodeType": "Block",
                    "src": "30299:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8234,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8232,
                            "src": "30309:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int64",
                              "typeString": "int64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8237,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8229,
                                "src": "30328:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8236,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "30322:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int64_$",
                                "typeString": "type(int64)"
                              },
                              "typeName": {
                                "id": 8235,
                                "name": "int64",
                                "nodeType": "ElementaryTypeName",
                                "src": "30322:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30322:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int64",
                              "typeString": "int64"
                            }
                          },
                          "src": "30309:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int64",
                            "typeString": "int64"
                          }
                        },
                        "id": 8240,
                        "nodeType": "ExpressionStatement",
                        "src": "30309:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8241,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8232,
                            "src": "30348:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int64",
                              "typeString": "int64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8242,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8229,
                            "src": "30362:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "30348:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8250,
                        "nodeType": "IfStatement",
                        "src": "30344:97:24",
                        "trueBody": {
                          "id": 8249,
                          "nodeType": "Block",
                          "src": "30369:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3634",
                                    "id": 8245,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30420:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  {
                                    "id": 8246,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8229,
                                    "src": "30424:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8244,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "30390:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8247,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30390:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8248,
                              "nodeType": "RevertStatement",
                              "src": "30383:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8227,
                    "nodeType": "StructuredDocumentation",
                    "src": "29915:307:24",
                    "text": " @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"
                  },
                  "id": 8252,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt64",
                  "nameLocation": "30236:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8230,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8229,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "30251:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8252,
                        "src": "30244:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8228,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30244:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30243:14:24"
                  },
                  "returnParameters": {
                    "id": 8233,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8232,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "30287:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8252,
                        "src": "30281:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int64",
                          "typeString": "int64"
                        },
                        "typeName": {
                          "id": 8231,
                          "name": "int64",
                          "nodeType": "ElementaryTypeName",
                          "src": "30281:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int64",
                            "typeString": "int64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30280:18:24"
                  },
                  "scope": 8475,
                  "src": "30227:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8277,
                    "nodeType": "Block",
                    "src": "30837:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8260,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8258,
                            "src": "30847:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8263,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8255,
                                "src": "30866:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "30860:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int56_$",
                                "typeString": "type(int56)"
                              },
                              "typeName": {
                                "id": 8261,
                                "name": "int56",
                                "nodeType": "ElementaryTypeName",
                                "src": "30860:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30860:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "src": "30847:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "id": 8266,
                        "nodeType": "ExpressionStatement",
                        "src": "30847:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8267,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8258,
                            "src": "30886:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8268,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8255,
                            "src": "30900:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "30886:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8276,
                        "nodeType": "IfStatement",
                        "src": "30882:97:24",
                        "trueBody": {
                          "id": 8275,
                          "nodeType": "Block",
                          "src": "30907:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3536",
                                    "id": 8271,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30958:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    "value": "56"
                                  },
                                  {
                                    "id": 8272,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8255,
                                    "src": "30962:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8270,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "30928:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8273,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30928:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8274,
                              "nodeType": "RevertStatement",
                              "src": "30921:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8253,
                    "nodeType": "StructuredDocumentation",
                    "src": "30453:307:24",
                    "text": " @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"
                  },
                  "id": 8278,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt56",
                  "nameLocation": "30774:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8255,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "30789:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8278,
                        "src": "30782:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8254,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30782:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30781:14:24"
                  },
                  "returnParameters": {
                    "id": 8259,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8258,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "30825:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8278,
                        "src": "30819:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 8257,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "30819:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30818:18:24"
                  },
                  "scope": 8475,
                  "src": "30765:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8303,
                    "nodeType": "Block",
                    "src": "31375:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8286,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8284,
                            "src": "31385:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int48",
                              "typeString": "int48"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8289,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8281,
                                "src": "31404:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8288,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31398:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int48_$",
                                "typeString": "type(int48)"
                              },
                              "typeName": {
                                "id": 8287,
                                "name": "int48",
                                "nodeType": "ElementaryTypeName",
                                "src": "31398:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8290,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31398:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int48",
                              "typeString": "int48"
                            }
                          },
                          "src": "31385:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int48",
                            "typeString": "int48"
                          }
                        },
                        "id": 8292,
                        "nodeType": "ExpressionStatement",
                        "src": "31385:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8293,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8284,
                            "src": "31424:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int48",
                              "typeString": "int48"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8294,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8281,
                            "src": "31438:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "31424:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8302,
                        "nodeType": "IfStatement",
                        "src": "31420:97:24",
                        "trueBody": {
                          "id": 8301,
                          "nodeType": "Block",
                          "src": "31445:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3438",
                                    "id": 8297,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31496:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    "value": "48"
                                  },
                                  {
                                    "id": 8298,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8281,
                                    "src": "31500:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8296,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "31466:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8299,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31466:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8300,
                              "nodeType": "RevertStatement",
                              "src": "31459:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8279,
                    "nodeType": "StructuredDocumentation",
                    "src": "30991:307:24",
                    "text": " @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"
                  },
                  "id": 8304,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt48",
                  "nameLocation": "31312:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8281,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "31327:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8304,
                        "src": "31320:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8280,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31320:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31319:14:24"
                  },
                  "returnParameters": {
                    "id": 8285,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8284,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "31363:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8304,
                        "src": "31357:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int48",
                          "typeString": "int48"
                        },
                        "typeName": {
                          "id": 8283,
                          "name": "int48",
                          "nodeType": "ElementaryTypeName",
                          "src": "31357:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int48",
                            "typeString": "int48"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31356:18:24"
                  },
                  "scope": 8475,
                  "src": "31303:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8329,
                    "nodeType": "Block",
                    "src": "31913:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8312,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8310,
                            "src": "31923:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int40",
                              "typeString": "int40"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8315,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8307,
                                "src": "31942:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8314,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31936:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int40_$",
                                "typeString": "type(int40)"
                              },
                              "typeName": {
                                "id": 8313,
                                "name": "int40",
                                "nodeType": "ElementaryTypeName",
                                "src": "31936:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31936:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int40",
                              "typeString": "int40"
                            }
                          },
                          "src": "31923:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int40",
                            "typeString": "int40"
                          }
                        },
                        "id": 8318,
                        "nodeType": "ExpressionStatement",
                        "src": "31923:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8319,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8310,
                            "src": "31962:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int40",
                              "typeString": "int40"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8320,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8307,
                            "src": "31976:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "31962:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8328,
                        "nodeType": "IfStatement",
                        "src": "31958:97:24",
                        "trueBody": {
                          "id": 8327,
                          "nodeType": "Block",
                          "src": "31983:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3430",
                                    "id": 8323,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "32034:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    "value": "40"
                                  },
                                  {
                                    "id": 8324,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8307,
                                    "src": "32038:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8322,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "32004:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8325,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "32004:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8326,
                              "nodeType": "RevertStatement",
                              "src": "31997:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8305,
                    "nodeType": "StructuredDocumentation",
                    "src": "31529:307:24",
                    "text": " @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"
                  },
                  "id": 8330,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt40",
                  "nameLocation": "31850:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8308,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8307,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "31865:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8330,
                        "src": "31858:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8306,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31858:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31857:14:24"
                  },
                  "returnParameters": {
                    "id": 8311,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8310,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "31901:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8330,
                        "src": "31895:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int40",
                          "typeString": "int40"
                        },
                        "typeName": {
                          "id": 8309,
                          "name": "int40",
                          "nodeType": "ElementaryTypeName",
                          "src": "31895:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int40",
                            "typeString": "int40"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31894:18:24"
                  },
                  "scope": 8475,
                  "src": "31841:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8355,
                    "nodeType": "Block",
                    "src": "32451:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8338,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8336,
                            "src": "32461:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8341,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8333,
                                "src": "32480:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "32474:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int32_$",
                                "typeString": "type(int32)"
                              },
                              "typeName": {
                                "id": 8339,
                                "name": "int32",
                                "nodeType": "ElementaryTypeName",
                                "src": "32474:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8342,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32474:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "src": "32461:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "id": 8344,
                        "nodeType": "ExpressionStatement",
                        "src": "32461:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8345,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8336,
                            "src": "32500:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8346,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8333,
                            "src": "32514:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32500:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8354,
                        "nodeType": "IfStatement",
                        "src": "32496:97:24",
                        "trueBody": {
                          "id": 8353,
                          "nodeType": "Block",
                          "src": "32521:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3332",
                                    "id": 8349,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "32572:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  {
                                    "id": 8350,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8333,
                                    "src": "32576:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8348,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "32542:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8351,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "32542:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8352,
                              "nodeType": "RevertStatement",
                              "src": "32535:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8331,
                    "nodeType": "StructuredDocumentation",
                    "src": "32067:307:24",
                    "text": " @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"
                  },
                  "id": 8356,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt32",
                  "nameLocation": "32388:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8334,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8333,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "32403:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8356,
                        "src": "32396:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8332,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32396:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32395:14:24"
                  },
                  "returnParameters": {
                    "id": 8337,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8336,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "32439:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8356,
                        "src": "32433:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "typeName": {
                          "id": 8335,
                          "name": "int32",
                          "nodeType": "ElementaryTypeName",
                          "src": "32433:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32432:18:24"
                  },
                  "scope": 8475,
                  "src": "32379:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8381,
                    "nodeType": "Block",
                    "src": "32989:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8364,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8362,
                            "src": "32999:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8367,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8359,
                                "src": "33018:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8366,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "33012:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int24_$",
                                "typeString": "type(int24)"
                              },
                              "typeName": {
                                "id": 8365,
                                "name": "int24",
                                "nodeType": "ElementaryTypeName",
                                "src": "33012:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8368,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33012:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "32999:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 8370,
                        "nodeType": "ExpressionStatement",
                        "src": "32999:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8371,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8362,
                            "src": "33038:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8372,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8359,
                            "src": "33052:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "33038:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8380,
                        "nodeType": "IfStatement",
                        "src": "33034:97:24",
                        "trueBody": {
                          "id": 8379,
                          "nodeType": "Block",
                          "src": "33059:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3234",
                                    "id": 8375,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "33110:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    "value": "24"
                                  },
                                  {
                                    "id": 8376,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8359,
                                    "src": "33114:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8374,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "33080:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8377,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "33080:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8378,
                              "nodeType": "RevertStatement",
                              "src": "33073:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8357,
                    "nodeType": "StructuredDocumentation",
                    "src": "32605:307:24",
                    "text": " @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"
                  },
                  "id": 8382,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt24",
                  "nameLocation": "32926:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8360,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8359,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "32941:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8382,
                        "src": "32934:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8358,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32934:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32933:14:24"
                  },
                  "returnParameters": {
                    "id": 8363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8362,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "32977:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8382,
                        "src": "32971:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 8361,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "32971:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32970:18:24"
                  },
                  "scope": 8475,
                  "src": "32917:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8407,
                    "nodeType": "Block",
                    "src": "33527:148:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8390,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8388,
                            "src": "33537:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8393,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8385,
                                "src": "33556:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8392,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "33550:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int16_$",
                                "typeString": "type(int16)"
                              },
                              "typeName": {
                                "id": 8391,
                                "name": "int16",
                                "nodeType": "ElementaryTypeName",
                                "src": "33550:5:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33550:12:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "src": "33537:25:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "id": 8396,
                        "nodeType": "ExpressionStatement",
                        "src": "33537:25:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8397,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8388,
                            "src": "33576:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8398,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8385,
                            "src": "33590:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "33576:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8406,
                        "nodeType": "IfStatement",
                        "src": "33572:97:24",
                        "trueBody": {
                          "id": 8405,
                          "nodeType": "Block",
                          "src": "33597:72:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3136",
                                    "id": 8401,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "33648:2:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "value": "16"
                                  },
                                  {
                                    "id": 8402,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8385,
                                    "src": "33652:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8400,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "33618:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8403,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "33618:40:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8404,
                              "nodeType": "RevertStatement",
                              "src": "33611:47:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8383,
                    "nodeType": "StructuredDocumentation",
                    "src": "33143:307:24",
                    "text": " @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"
                  },
                  "id": 8408,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt16",
                  "nameLocation": "33464:7:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8386,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8385,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "33479:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8408,
                        "src": "33472:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8384,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "33472:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "33471:14:24"
                  },
                  "returnParameters": {
                    "id": 8389,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8388,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "33515:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8408,
                        "src": "33509:16:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int16",
                          "typeString": "int16"
                        },
                        "typeName": {
                          "id": 8387,
                          "name": "int16",
                          "nodeType": "ElementaryTypeName",
                          "src": "33509:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "33508:18:24"
                  },
                  "scope": 8475,
                  "src": "33455:220:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8433,
                    "nodeType": "Block",
                    "src": "34058:146:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 8421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8416,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8414,
                            "src": "34068:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int8",
                              "typeString": "int8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8419,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8411,
                                "src": "34086:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8418,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "34081:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int8_$",
                                "typeString": "type(int8)"
                              },
                              "typeName": {
                                "id": 8417,
                                "name": "int8",
                                "nodeType": "ElementaryTypeName",
                                "src": "34081:4:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34081:11:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int8",
                              "typeString": "int8"
                            }
                          },
                          "src": "34068:24:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int8",
                            "typeString": "int8"
                          }
                        },
                        "id": 8422,
                        "nodeType": "ExpressionStatement",
                        "src": "34068:24:24"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8423,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8414,
                            "src": "34106:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int8",
                              "typeString": "int8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8424,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8411,
                            "src": "34120:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "34106:19:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8432,
                        "nodeType": "IfStatement",
                        "src": "34102:96:24",
                        "trueBody": {
                          "id": 8431,
                          "nodeType": "Block",
                          "src": "34127:71:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "38",
                                    "id": 8427,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "34178:1:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  {
                                    "id": 8428,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8411,
                                    "src": "34181:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8426,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6732,
                                  "src": "34148:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$__$",
                                    "typeString": "function (uint8,int256) pure"
                                  }
                                },
                                "id": 8429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "34148:39:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8430,
                              "nodeType": "RevertStatement",
                              "src": "34141:46:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8409,
                    "nodeType": "StructuredDocumentation",
                    "src": "33681:302:24",
                    "text": " @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"
                  },
                  "id": 8434,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt8",
                  "nameLocation": "33997:6:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8412,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8411,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "34011:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8434,
                        "src": "34004:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8410,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34004:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34003:14:24"
                  },
                  "returnParameters": {
                    "id": 8415,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8414,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "34046:10:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8434,
                        "src": "34041:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int8",
                          "typeString": "int8"
                        },
                        "typeName": {
                          "id": 8413,
                          "name": "int8",
                          "nodeType": "ElementaryTypeName",
                          "src": "34041:4:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int8",
                            "typeString": "int8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34040:17:24"
                  },
                  "scope": 8475,
                  "src": "33988:216:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8463,
                    "nodeType": "Block",
                    "src": "34444:250:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8442,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8437,
                            "src": "34557:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 8447,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "34578:6:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 8446,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "34578:6:24",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      }
                                    ],
                                    "id": 8445,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "34573:4:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 8448,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "34573:12:24",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_int256",
                                    "typeString": "type(int256)"
                                  }
                                },
                                "id": 8449,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "34586:3:24",
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "34573:16:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "34565:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 8443,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "34565:7:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8450,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34565:25:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34557:33:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8457,
                        "nodeType": "IfStatement",
                        "src": "34553:105:24",
                        "trueBody": {
                          "id": 8456,
                          "nodeType": "Block",
                          "src": "34592:66:24",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 8453,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8437,
                                    "src": "34641:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8452,
                                  "name": "SafeCastOverflowedUintToInt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6737,
                                  "src": "34613:27:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 8454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "34613:34:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8455,
                              "nodeType": "RevertStatement",
                              "src": "34606:41:24"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8460,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8437,
                              "src": "34681:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "34674:6:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int256_$",
                              "typeString": "type(int256)"
                            },
                            "typeName": {
                              "id": 8458,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "34674:6:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34674:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 8441,
                        "id": 8462,
                        "nodeType": "Return",
                        "src": "34667:20:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8435,
                    "nodeType": "StructuredDocumentation",
                    "src": "34210:165:24",
                    "text": " @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."
                  },
                  "id": 8464,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt256",
                  "nameLocation": "34389:8:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8438,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8437,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "34406:5:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8464,
                        "src": "34398:13:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8436,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34398:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34397:15:24"
                  },
                  "returnParameters": {
                    "id": 8441,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8440,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8464,
                        "src": "34436:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8439,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34436:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34435:8:24"
                  },
                  "scope": 8475,
                  "src": "34380:314:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8473,
                    "nodeType": "Block",
                    "src": "34853:87:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "34888:46:24",
                          "nodeType": "YulBlock",
                          "src": "34888:46:24",
                          "statements": [
                            {
                              "nativeSrc": "34902:22:24",
                              "nodeType": "YulAssignment",
                              "src": "34902:22:24",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "b",
                                        "nativeSrc": "34921:1:24",
                                        "nodeType": "YulIdentifier",
                                        "src": "34921:1:24"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nativeSrc": "34914:6:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "34914:6:24"
                                    },
                                    "nativeSrc": "34914:9:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "34914:9:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "34907:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "34907:6:24"
                                },
                                "nativeSrc": "34907:17:24",
                                "nodeType": "YulFunctionCall",
                                "src": "34907:17:24"
                              },
                              "variableNames": [
                                {
                                  "name": "u",
                                  "nativeSrc": "34902:1:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "34902:1:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 8467,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "34921:1:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 8470,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "34902:1:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 8472,
                        "nodeType": "InlineAssembly",
                        "src": "34863:71:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8465,
                    "nodeType": "StructuredDocumentation",
                    "src": "34700:90:24",
                    "text": " @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump."
                  },
                  "id": 8474,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint",
                  "nameLocation": "34804:6:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8467,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "34816:1:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8474,
                        "src": "34811:6:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 8466,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "34811:4:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34810:8:24"
                  },
                  "returnParameters": {
                    "id": 8471,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8470,
                        "mutability": "mutable",
                        "name": "u",
                        "nameLocation": "34850:1:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 8474,
                        "src": "34842:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8469,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34842:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34841:11:24"
                  },
                  "scope": 8475,
                  "src": "34795:145:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 8476,
              "src": "769:34173:24",
              "usedErrors": [
                6720,
                6725,
                6732,
                6737
              ],
              "usedEvents": []
            }
          ],
          "src": "192:34751:24"
        },
        "id": 24
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol",
          "exportedSymbols": {
            "SafeCast": [
              8475
            ],
            "SignedMath": [
              8619
            ]
          },
          "id": 8620,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8477,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "109:24:25"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
              "file": "./SafeCast.sol",
              "id": 8479,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8620,
              "sourceUnit": 8476,
              "src": "135:40:25",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8478,
                    "name": "SafeCast",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8475,
                    "src": "143:8:25",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "SignedMath",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 8480,
                "nodeType": "StructuredDocumentation",
                "src": "177:80:25",
                "text": " @dev Standard signed math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 8619,
              "linearizedBaseContracts": [
                8619
              ],
              "name": "SignedMath",
              "nameLocation": "266:10:25",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 8509,
                    "nodeType": "Block",
                    "src": "746:215:25",
                    "statements": [
                      {
                        "id": 8508,
                        "nodeType": "UncheckedBlock",
                        "src": "756:199:25",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 8506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8492,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8487,
                                "src": "894:1:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 8504,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          },
                                          "id": 8495,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 8493,
                                            "name": "a",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8485,
                                            "src": "900:1:25",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "^",
                                          "rightExpression": {
                                            "id": 8494,
                                            "name": "b",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8487,
                                            "src": "904:1:25",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "src": "900:5:25",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "id": 8496,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "899:7:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "id": 8501,
                                              "name": "condition",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8483,
                                              "src": "932:9:25",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            ],
                                            "expression": {
                                              "id": 8499,
                                              "name": "SafeCast",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8475,
                                              "src": "916:8:25",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_SafeCast_$8475_$",
                                                "typeString": "type(library SafeCast)"
                                              }
                                            },
                                            "id": 8500,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "925:6:25",
                                            "memberName": "toUint",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8474,
                                            "src": "916:15:25",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                              "typeString": "function (bool) pure returns (uint256)"
                                            }
                                          },
                                          "id": 8502,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "916:26:25",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 8498,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "909:6:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_int256_$",
                                          "typeString": "type(int256)"
                                        },
                                        "typeName": {
                                          "id": 8497,
                                          "name": "int256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "909:6:25",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 8503,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "909:34:25",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "src": "899:44:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 8505,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "898:46:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "894:50:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "functionReturnParameters": 8491,
                            "id": 8507,
                            "nodeType": "Return",
                            "src": "887:57:25"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8481,
                    "nodeType": "StructuredDocumentation",
                    "src": "283:374:25",
                    "text": " @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."
                  },
                  "id": 8510,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ternary",
                  "nameLocation": "671:7:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8488,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8483,
                        "mutability": "mutable",
                        "name": "condition",
                        "nameLocation": "684:9:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8510,
                        "src": "679:14:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 8482,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "679:4:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8485,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "702:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8510,
                        "src": "695:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8484,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "695:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8487,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "712:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8510,
                        "src": "705:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8486,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "705:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "678:36:25"
                  },
                  "returnParameters": {
                    "id": 8491,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8490,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8510,
                        "src": "738:6:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8489,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "738:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "737:8:25"
                  },
                  "scope": 8619,
                  "src": "662:299:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8528,
                    "nodeType": "Block",
                    "src": "1102:44:25",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 8523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8521,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8513,
                                "src": "1127:1:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 8522,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8515,
                                "src": "1131:1:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "1127:5:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 8524,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8513,
                              "src": "1134:1:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 8525,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8515,
                              "src": "1137:1:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 8520,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8510,
                            "src": "1119:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$",
                              "typeString": "function (bool,int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 8526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1119:20:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 8519,
                        "id": 8527,
                        "nodeType": "Return",
                        "src": "1112:27:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8511,
                    "nodeType": "StructuredDocumentation",
                    "src": "967:66:25",
                    "text": " @dev Returns the largest of two signed numbers."
                  },
                  "id": 8529,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "1047:3:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8516,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8513,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1058:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8529,
                        "src": "1051:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8512,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1051:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8515,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1068:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8529,
                        "src": "1061:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8514,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1061:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1050:20:25"
                  },
                  "returnParameters": {
                    "id": 8519,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8518,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8529,
                        "src": "1094:6:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8517,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1094:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1093:8:25"
                  },
                  "scope": 8619,
                  "src": "1038:108:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8547,
                    "nodeType": "Block",
                    "src": "1288:44:25",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 8542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8540,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8532,
                                "src": "1313:1:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 8541,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8534,
                                "src": "1317:1:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "1313:5:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 8543,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8532,
                              "src": "1320:1:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 8544,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8534,
                              "src": "1323:1:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 8539,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8510,
                            "src": "1305:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$",
                              "typeString": "function (bool,int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 8545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1305:20:25",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 8538,
                        "id": 8546,
                        "nodeType": "Return",
                        "src": "1298:27:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8530,
                    "nodeType": "StructuredDocumentation",
                    "src": "1152:67:25",
                    "text": " @dev Returns the smallest of two signed numbers."
                  },
                  "id": 8548,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "1233:3:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8535,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8532,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1244:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8548,
                        "src": "1237:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8531,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1237:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8534,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1254:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8548,
                        "src": "1247:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8533,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1247:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1236:20:25"
                  },
                  "returnParameters": {
                    "id": 8538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8537,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8548,
                        "src": "1280:6:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8536,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1280:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1279:8:25"
                  },
                  "scope": 8619,
                  "src": "1224:108:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8591,
                    "nodeType": "Block",
                    "src": "1537:162:25",
                    "statements": [
                      {
                        "assignments": [
                          8559
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8559,
                            "mutability": "mutable",
                            "name": "x",
                            "nameLocation": "1606:1:25",
                            "nodeType": "VariableDeclaration",
                            "scope": 8591,
                            "src": "1599:8:25",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 8558,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1599:6:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8572,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 8562,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 8560,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8551,
                                  "src": "1611:1:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 8561,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8553,
                                  "src": "1615:1:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "1611:5:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 8563,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1610:7:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 8569,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 8566,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 8564,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8551,
                                        "src": "1622:1:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "^",
                                      "rightExpression": {
                                        "id": 8565,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8553,
                                        "src": "1626:1:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "1622:5:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 8567,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1621:7:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 8568,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1632:1:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "1621:12:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 8570,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1620:14:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "1610:24:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1599:35:25"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8573,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8559,
                            "src": "1651:1:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 8587,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8581,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "arguments": [
                                          {
                                            "id": 8578,
                                            "name": "x",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8559,
                                            "src": "1671:1:25",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          ],
                                          "id": 8577,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "1663:7:25",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 8576,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "1663:7:25",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 8579,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1663:10:25",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "hexValue": "323535",
                                        "id": 8580,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1677:3:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_255_by_1",
                                          "typeString": "int_const 255"
                                        },
                                        "value": "255"
                                      },
                                      "src": "1663:17:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8575,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1656:6:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 8574,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1656:6:25",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 8582,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1656:25:25",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 8585,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 8583,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8551,
                                        "src": "1685:1:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "^",
                                      "rightExpression": {
                                        "id": 8584,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8553,
                                        "src": "1689:1:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "1685:5:25",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 8586,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1684:7:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "1656:35:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 8588,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1655:37:25",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "1651:41:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 8557,
                        "id": 8590,
                        "nodeType": "Return",
                        "src": "1644:48:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8549,
                    "nodeType": "StructuredDocumentation",
                    "src": "1338:126:25",
                    "text": " @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero."
                  },
                  "id": 8592,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "1478:7:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8554,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8551,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1493:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8592,
                        "src": "1486:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8550,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1486:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8553,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1503:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8592,
                        "src": "1496:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8552,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1496:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1485:20:25"
                  },
                  "returnParameters": {
                    "id": 8557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8556,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8592,
                        "src": "1529:6:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8555,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1529:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1528:8:25"
                  },
                  "scope": 8619,
                  "src": "1469:230:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8617,
                    "nodeType": "Block",
                    "src": "1843:767:25",
                    "statements": [
                      {
                        "id": 8616,
                        "nodeType": "UncheckedBlock",
                        "src": "1853:751:25",
                        "statements": [
                          {
                            "assignments": [
                              8601
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 8601,
                                "mutability": "mutable",
                                "name": "mask",
                                "nameLocation": "2424:4:25",
                                "nodeType": "VariableDeclaration",
                                "scope": 8616,
                                "src": "2417:11:25",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "typeName": {
                                  "id": 8600,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2417:6:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 8605,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 8604,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8602,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8595,
                                "src": "2431:1:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "323535",
                                "id": 8603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2436:3:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                },
                                "value": "255"
                              },
                              "src": "2431:8:25",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2417:22:25"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 8613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        },
                                        "id": 8610,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 8608,
                                          "name": "n",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8595,
                                          "src": "2576:1:25",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 8609,
                                          "name": "mask",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8601,
                                          "src": "2580:4:25",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "src": "2576:8:25",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      }
                                    ],
                                    "id": 8611,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "2575:10:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "id": 8612,
                                    "name": "mask",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8601,
                                    "src": "2588:4:25",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "src": "2575:17:25",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 8607,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2567:7:25",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 8606,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2567:7:25",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8614,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2567:26:25",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 8599,
                            "id": 8615,
                            "nodeType": "Return",
                            "src": "2560:33:25"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8593,
                    "nodeType": "StructuredDocumentation",
                    "src": "1705:78:25",
                    "text": " @dev Returns the absolute unsigned value of a signed value."
                  },
                  "id": 8618,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "abs",
                  "nameLocation": "1797:3:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8596,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8595,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "1808:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 8618,
                        "src": "1801:8:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8594,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1801:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1800:10:25"
                  },
                  "returnParameters": {
                    "id": 8599,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8598,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8618,
                        "src": "1834:7:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8597,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1834:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1833:9:25"
                  },
                  "scope": 8619,
                  "src": "1788:822:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 8620,
              "src": "258:2354:25",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "109:2504:25"
        },
        "id": 25
      },
      "contracts/MetaDog.sol": {
        "ast": {
          "absolutePath": "contracts/MetaDog.sol",
          "exportedSymbols": {
            "ERC721": [
              1261
            ],
            "ERC721Batch": [
              9407
            ],
            "ERC721Burnable": [
              1425
            ],
            "ERC721Enumerable": [
              1811
            ],
            "ERC721Freezable": [
              9543
            ],
            "ERC721MintPausable": [
              9657
            ],
            "ERC721OpenSeaGassLess": [
              9731
            ],
            "ERC721Pausable": [
              1846
            ],
            "ERC721Royalty": [
              1875
            ],
            "ERC721Whitelist": [
              9865
            ],
            "IERC721": [
              1378
            ],
            "MetaDog": [
              9333
            ],
            "Ownable": [
              147
            ],
            "ReentrancyGuard": [
              2538
            ]
          },
          "id": 9334,
          "license": "FSL-1.1-MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8621,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".24"
              ],
              "nodeType": "PragmaDirective",
              "src": "59:24:26"
            },
            {
              "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
              "file": "@openzeppelin/contracts/access/Ownable.sol",
              "id": 8623,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 148,
              "src": "85:69:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8622,
                    "name": "Ownable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 147,
                    "src": "94:7:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "id": 8625,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 1262,
              "src": "155:73:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8624,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "164:6:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "id": 8627,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 1379,
              "src": "229:75:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8626,
                    "name": "IERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1378,
                    "src": "238:7:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol",
              "id": 8629,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 1812,
              "src": "305:104:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8628,
                    "name": "ERC721Enumerable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1811,
                    "src": "314:16:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol",
              "id": 8631,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 1847,
              "src": "410:100:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8630,
                    "name": "ERC721Pausable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1846,
                    "src": "419:14:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol",
              "id": 8633,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 1426,
              "src": "511:100:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8632,
                    "name": "ERC721Burnable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1425,
                    "src": "520:14:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol",
              "file": "@openzeppelin/contracts/utils/ReentrancyGuard.sol",
              "id": 8635,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 2539,
              "src": "612:84:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8634,
                    "name": "ReentrancyGuard",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2538,
                    "src": "621:15:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol",
              "id": 8637,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 1876,
              "src": "697:98:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8636,
                    "name": "ERC721Royalty",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1875,
                    "src": "706:13:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/extensions/ERC721Whitelist.sol",
              "file": "./extensions/ERC721Whitelist.sol",
              "id": 8639,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 9866,
              "src": "796:67:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8638,
                    "name": "ERC721Whitelist",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9865,
                    "src": "805:15:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/extensions/ERC721Freezable.sol",
              "file": "./extensions/ERC721Freezable.sol",
              "id": 8641,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 9544,
              "src": "864:67:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8640,
                    "name": "ERC721Freezable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9543,
                    "src": "873:15:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/extensions/ERC721MintPausable.sol",
              "file": "./extensions/ERC721MintPausable.sol",
              "id": 8643,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 9658,
              "src": "932:73:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8642,
                    "name": "ERC721MintPausable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9657,
                    "src": "941:18:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/extensions/ERC721OpenSeaGassLess.sol",
              "file": "./extensions/ERC721OpenSeaGassLess.sol",
              "id": 8645,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 9739,
              "src": "1006:79:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8644,
                    "name": "ERC721OpenSeaGassLess",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9731,
                    "src": "1015:21:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/extensions/ERC721Batch.sol",
              "file": "./extensions/ERC721Batch.sol",
              "id": 8647,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9334,
              "sourceUnit": 9408,
              "src": "1086:59:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8646,
                    "name": "ERC721Batch",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9407,
                    "src": "1095:11:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8648,
                    "name": "ERC721Enumerable",
                    "nameLocations": [
                      "1171:16:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1811,
                    "src": "1171:16:26"
                  },
                  "id": 8649,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1171:16:26"
                },
                {
                  "baseName": {
                    "id": 8650,
                    "name": "ERC721Burnable",
                    "nameLocations": [
                      "1193:14:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1425,
                    "src": "1193:14:26"
                  },
                  "id": 8651,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1193:14:26"
                },
                {
                  "baseName": {
                    "id": 8652,
                    "name": "ERC721Pausable",
                    "nameLocations": [
                      "1213:14:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1846,
                    "src": "1213:14:26"
                  },
                  "id": 8653,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1213:14:26"
                },
                {
                  "baseName": {
                    "id": 8654,
                    "name": "ERC721Whitelist",
                    "nameLocations": [
                      "1233:15:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9865,
                    "src": "1233:15:26"
                  },
                  "id": 8655,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1233:15:26"
                },
                {
                  "baseName": {
                    "id": 8656,
                    "name": "ERC721Freezable",
                    "nameLocations": [
                      "1254:15:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9543,
                    "src": "1254:15:26"
                  },
                  "id": 8657,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1254:15:26"
                },
                {
                  "baseName": {
                    "id": 8658,
                    "name": "ERC721MintPausable",
                    "nameLocations": [
                      "1275:18:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9657,
                    "src": "1275:18:26"
                  },
                  "id": 8659,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1275:18:26"
                },
                {
                  "baseName": {
                    "id": 8660,
                    "name": "ERC721OpenSeaGassLess",
                    "nameLocations": [
                      "1299:21:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9731,
                    "src": "1299:21:26"
                  },
                  "id": 8661,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1299:21:26"
                },
                {
                  "baseName": {
                    "id": 8662,
                    "name": "ERC721Batch",
                    "nameLocations": [
                      "1326:11:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9407,
                    "src": "1326:11:26"
                  },
                  "id": 8663,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1326:11:26"
                },
                {
                  "baseName": {
                    "id": 8664,
                    "name": "ERC721Royalty",
                    "nameLocations": [
                      "1343:13:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1875,
                    "src": "1343:13:26"
                  },
                  "id": 8665,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1343:13:26"
                },
                {
                  "baseName": {
                    "id": 8666,
                    "name": "Ownable",
                    "nameLocations": [
                      "1362:7:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 147,
                    "src": "1362:7:26"
                  },
                  "id": 8667,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1362:7:26"
                },
                {
                  "baseName": {
                    "id": 8668,
                    "name": "ReentrancyGuard",
                    "nameLocations": [
                      "1375:15:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2538,
                    "src": "1375:15:26"
                  },
                  "id": 8669,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1375:15:26"
                }
              ],
              "canonicalName": "MetaDog",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9333,
              "linearizedBaseContracts": [
                9333,
                2538,
                147,
                1875,
                9407,
                9731,
                9657,
                9543,
                9865,
                1846,
                2469,
                1425,
                1811,
                1907,
                1261,
                257,
                1935,
                1378,
                2279,
                5077,
                167,
                5089,
                2309
              ],
              "name": "MetaDog",
              "nameLocation": "1156:7:26",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "functionSelector": "0922f9c5",
                  "id": 8672,
                  "mutability": "constant",
                  "name": "RESERVES",
                  "nameLocation": "1635:8:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "1611:36:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8670,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1611:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "35",
                    "id": 8671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1646:1:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5_by_1",
                      "typeString": "int_const 5"
                    },
                    "value": "5"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "7ad7614d",
                  "id": 8675,
                  "mutability": "constant",
                  "name": "PRICE_IN_WEI_WHITELIST",
                  "nameLocation": "1733:22:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "1709:61:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1709:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "302e30303639",
                    "id": 8674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1758:12:26",
                    "subdenomination": "ether",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6900000000000000_by_1",
                      "typeString": "int_const 6900000000000000"
                    },
                    "value": "0.0069"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "fbd9b92d",
                  "id": 8678,
                  "mutability": "constant",
                  "name": "PRICE_IN_WEI_PUBLIC",
                  "nameLocation": "1841:19:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "1817:57:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8676,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1817:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "302e303432",
                    "id": 8677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1863:11:26",
                    "subdenomination": "ether",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_42000000000000000_by_1",
                      "typeString": "int_const 42000000000000000"
                    },
                    "value": "0.042"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "d0babf38",
                  "id": 8681,
                  "mutability": "constant",
                  "name": "ROYALTIES_IN_BASIS_POINTS",
                  "nameLocation": "1941:25:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "1918:54:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 8679,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "1918:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "value": {
                    "hexValue": "353030",
                    "id": 8680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1969:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_500_by_1",
                      "typeString": "int_const 500"
                    },
                    "value": "500"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "f43a22dc",
                  "id": 8684,
                  "mutability": "constant",
                  "name": "MAX_PER_TX",
                  "nameLocation": "2018:10:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "1994:38:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8682,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1994:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "35",
                    "id": 8683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2031:1:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5_by_1",
                      "typeString": "int_const 5"
                    },
                    "value": "5"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "32cb6b0c",
                  "id": 8687,
                  "mutability": "constant",
                  "name": "MAX_SUPPLY",
                  "nameLocation": "2122:10:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "2098:40:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8685,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2098:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "313131",
                    "id": 8686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2135:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_111_by_1",
                      "typeString": "int_const 111"
                    },
                    "value": "111"
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 8689,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nameLocation": "2418:8:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "2402:24:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 8691,
                  "mutability": "mutable",
                  "name": "_baseTokenURI",
                  "nameLocation": "2447:13:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "2432:28:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8690,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2432:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 8693,
                  "mutability": "immutable",
                  "name": "_wallet",
                  "nameLocation": "2767:7:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "2733:41:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8692,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2733:15:26",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 8697,
                  "mutability": "mutable",
                  "name": "_addressToMinted",
                  "nameLocation": "2865:16:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "2829:52:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 8696,
                    "keyName": "",
                    "keyNameLocation": "-1:-1:-1",
                    "keyType": {
                      "id": 8694,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2837:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "2829:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 8695,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2848:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 8700,
                  "mutability": "mutable",
                  "name": "_publicSaleOpen",
                  "nameLocation": "2946:15:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 9333,
                  "src": "2933:36:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8698,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2933:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": {
                    "hexValue": "66616c7365",
                    "id": 8699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2964:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 8701,
                    "nodeType": "StructuredDocumentation",
                    "src": "3004:76:26",
                    "text": "@dev Error thrown when a zero address is provided where it's not allowed"
                  },
                  "errorSelector": "054085ce",
                  "id": 8705,
                  "name": "ZeroAddressNotAllowed",
                  "nameLocation": "3091:21:26",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 8704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8703,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "3121:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8705,
                        "src": "3113:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8702,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3113:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3112:17:26"
                  },
                  "src": "3085:45:26"
                },
                {
                  "body": {
                    "id": 8754,
                    "nodeType": "Block",
                    "src": "3439:235:26",
                    "statements": [
                      {
                        "expression": {
                          "id": 8731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8729,
                            "name": "_baseTokenURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8691,
                            "src": "3449:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 8730,
                            "name": "baseTokenURI_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8711,
                            "src": "3465:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3449:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 8732,
                        "nodeType": "ExpressionStatement",
                        "src": "3449:29:26"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 8738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8733,
                            "name": "wallet_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8715,
                            "src": "3492:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 8736,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3511:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 8735,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3503:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 8734,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3503:7:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3503:10:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3492:21:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8744,
                        "nodeType": "IfStatement",
                        "src": "3488:89:26",
                        "trueBody": {
                          "id": 8743,
                          "nodeType": "Block",
                          "src": "3515:62:26",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 8740,
                                    "name": "wallet_",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8715,
                                    "src": "3558:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 8739,
                                  "name": "ZeroAddressNotAllowed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8705,
                                  "src": "3536:21:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 8741,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3536:30:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8742,
                              "nodeType": "RevertStatement",
                              "src": "3529:37:26"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 8747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8745,
                            "name": "_wallet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8693,
                            "src": "3586:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 8746,
                            "name": "wallet_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8715,
                            "src": "3596:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3586:17:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 8748,
                        "nodeType": "ExpressionStatement",
                        "src": "3586:17:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8750,
                              "name": "wallet_",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8715,
                              "src": "3632:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8751,
                              "name": "ROYALTIES_IN_BASIS_POINTS",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8681,
                              "src": "3641:25:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            ],
                            "id": 8749,
                            "name": "_setDefaultRoyalty",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2206,
                            "src": "3613:18:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint96_$returns$__$",
                              "typeString": "function (address,uint96)"
                            }
                          },
                          "id": 8752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3613:54:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8753,
                        "nodeType": "ExpressionStatement",
                        "src": "3613:54:26"
                      }
                    ]
                  },
                  "id": 8755,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 8718,
                          "name": "name_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8707,
                          "src": "3338:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "id": 8719,
                          "name": "symbol_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8709,
                          "src": "3345:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 8720,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 8717,
                        "name": "ERC721",
                        "nameLocations": [
                          "3331:6:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "3331:6:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3331:22:26"
                    },
                    {
                      "arguments": [
                        {
                          "id": 8722,
                          "name": "proxyRegistryAddress_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8713,
                          "src": "3384:21:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 8723,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 8721,
                        "name": "ERC721OpenSeaGassLess",
                        "nameLocations": [
                          "3362:21:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9731,
                        "src": "3362:21:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3362:44:26"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 8725,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3423:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8726,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3427:6:26",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "3423:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 8727,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 8724,
                        "name": "Ownable",
                        "nameLocations": [
                          "3415:7:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 147,
                        "src": "3415:7:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3415:19:26"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8716,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8707,
                        "mutability": "mutable",
                        "name": "name_",
                        "nameLocation": "3171:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8755,
                        "src": "3157:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 8706,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3157:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8709,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nameLocation": "3200:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8755,
                        "src": "3186:21:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 8708,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3186:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8711,
                        "mutability": "mutable",
                        "name": "baseTokenURI_",
                        "nameLocation": "3231:13:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8755,
                        "src": "3217:27:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 8710,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3217:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8713,
                        "mutability": "mutable",
                        "name": "proxyRegistryAddress_",
                        "nameLocation": "3262:21:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8755,
                        "src": "3254:29:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8712,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3254:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8715,
                        "mutability": "mutable",
                        "name": "wallet_",
                        "nameLocation": "3309:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8755,
                        "src": "3293:23:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 8714,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3293:15:26",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3147:175:26"
                  },
                  "returnParameters": {
                    "id": 8728,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3439:0:26"
                  },
                  "scope": 9333,
                  "src": "3136:538:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 8768,
                    "nodeType": "Block",
                    "src": "3977:46:26",
                    "statements": [
                      {
                        "expression": {
                          "id": 8766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8764,
                            "name": "_baseTokenURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8691,
                            "src": "3987:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 8765,
                            "name": "baseTokenURI_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8757,
                            "src": "4003:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3987:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 8767,
                        "nodeType": "ExpressionStatement",
                        "src": "3987:29:26"
                      }
                    ]
                  },
                  "functionSelector": "55f804b3",
                  "id": 8769,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8760,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8759,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "3950:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "3950:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3950:9:26"
                    },
                    {
                      "id": 8762,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8761,
                        "name": "whenURINotFrozen",
                        "nameLocations": [
                          "3960:16:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9432,
                        "src": "3960:16:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3960:16:26"
                    }
                  ],
                  "name": "setBaseURI",
                  "nameLocation": "3903:10:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8758,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8757,
                        "mutability": "mutable",
                        "name": "baseTokenURI_",
                        "nameLocation": "3928:13:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8769,
                        "src": "3914:27:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 8756,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3914:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3913:29:26"
                  },
                  "returnParameters": {
                    "id": 8763,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3977:0:26"
                  },
                  "scope": 9333,
                  "src": "3894:129:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    509
                  ],
                  "body": {
                    "id": 8777,
                    "nodeType": "Block",
                    "src": "4096:37:26",
                    "statements": [
                      {
                        "expression": {
                          "id": 8775,
                          "name": "_baseTokenURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8691,
                          "src": "4113:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 8774,
                        "id": 8776,
                        "nodeType": "Return",
                        "src": "4106:20:26"
                      }
                    ]
                  },
                  "id": 8778,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_baseURI",
                  "nameLocation": "4038:8:26",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8771,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4063:8:26"
                  },
                  "parameters": {
                    "id": 8770,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4046:2:26"
                  },
                  "returnParameters": {
                    "id": 8774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8773,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8778,
                        "src": "4081:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 8772,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4081:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4080:15:26"
                  },
                  "scope": 9333,
                  "src": "4029:104:26",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    500
                  ],
                  "body": {
                    "id": 8811,
                    "nodeType": "Block",
                    "src": "4227:159:26",
                    "statements": [
                      {
                        "assignments": [
                          8787
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8787,
                            "mutability": "mutable",
                            "name": "tokenUri",
                            "nameLocation": "4251:8:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 8811,
                            "src": "4237:22:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 8786,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "4237:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8792,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8790,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8780,
                              "src": "4277:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 8788,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "4262:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_MetaDog_$9333_$",
                                "typeString": "type(contract super MetaDog)"
                              }
                            },
                            "id": 8789,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4268:8:26",
                            "memberName": "tokenURI",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 500,
                            "src": "4262:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256) view returns (string memory)"
                            }
                          },
                          "id": 8791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4262:23:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4237:48:26"
                      },
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8799,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8795,
                                    "name": "tokenUri",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8787,
                                    "src": "4308:8:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 8794,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4302:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 8793,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4302:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 8796,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4302:15:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 8797,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4318:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4302:22:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 8798,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4327:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "4302:26:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "hexValue": "",
                            "id": 8808,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4377:2:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          },
                          "id": 8809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "4302:77:26",
                          "trueExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 8804,
                                    "name": "tokenUri",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8787,
                                    "src": "4355:8:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "hexValue": "2e6a736f6e",
                                    "id": 8805,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4365:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_94311adc0a0cd4e10be11b23bd4316b8cffa4adf693e8f96f5c075aa439a7972",
                                      "typeString": "literal_string \".json\""
                                    },
                                    "value": ".json"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_94311adc0a0cd4e10be11b23bd4316b8cffa4adf693e8f96f5c075aa439a7972",
                                      "typeString": "literal_string \".json\""
                                    }
                                  ],
                                  "expression": {
                                    "id": 8802,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "4338:3:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 8803,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "4342:12:26",
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "4338:16:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 8806,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4338:35:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 8801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4331:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 8800,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "4331:6:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4331:43:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 8785,
                        "id": 8810,
                        "nodeType": "Return",
                        "src": "4295:84:26"
                      }
                    ]
                  },
                  "functionSelector": "c87b56dd",
                  "id": 8812,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "4148:8:26",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8782,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4194:8:26"
                  },
                  "parameters": {
                    "id": 8781,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8780,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4165:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8812,
                        "src": "4157:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8779,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4157:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4156:17:26"
                  },
                  "returnParameters": {
                    "id": 8785,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8784,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8812,
                        "src": "4212:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 8783,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4212:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4211:15:26"
                  },
                  "scope": 9333,
                  "src": "4139:247:26",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 8829,
                    "nodeType": "Block",
                    "src": "4476:50:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8824,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8814,
                              "src": "4501:2:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8825,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8816,
                              "src": "4505:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8826,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8818,
                              "src": "4514:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8823,
                            "name": "_update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8868
                            ],
                            "referencedDeclaration": 8868,
                            "src": "4493:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 8827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4493:26:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 8822,
                        "id": 8828,
                        "nodeType": "Return",
                        "src": "4486:33:26"
                      }
                    ]
                  },
                  "functionSelector": "501a5162",
                  "id": 8830,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "update",
                  "nameLocation": "4401:6:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8819,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8814,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4416:2:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8830,
                        "src": "4408:10:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8813,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4408:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8816,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4428:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8830,
                        "src": "4420:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8815,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4420:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8818,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "4445:4:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8830,
                        "src": "4437:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8817,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4437:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4407:43:26"
                  },
                  "returnParameters": {
                    "id": 8822,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8821,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8830,
                        "src": "4467:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8820,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4467:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4466:9:26"
                  },
                  "scope": 9333,
                  "src": "4392:134:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 8842,
                    "nodeType": "Block",
                    "src": "4596:49:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8838,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8832,
                              "src": "4623:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8839,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8834,
                              "src": "4632:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 8837,
                            "name": "_increaseBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8886
                            ],
                            "referencedDeclaration": 8886,
                            "src": "4606:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$",
                              "typeString": "function (address,uint128)"
                            }
                          },
                          "id": 8840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4606:32:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8841,
                        "nodeType": "ExpressionStatement",
                        "src": "4606:32:26"
                      }
                    ]
                  },
                  "functionSelector": "d283e3cc",
                  "id": 8843,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseBalance",
                  "nameLocation": "4541:15:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8832,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "4565:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8843,
                        "src": "4557:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8831,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4557:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8834,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4582:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8843,
                        "src": "4574:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 8833,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4574:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4556:32:26"
                  },
                  "returnParameters": {
                    "id": 8836,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4596:0:26"
                  },
                  "scope": 9333,
                  "src": "4532:113:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    874,
                    1624,
                    1845,
                    9542,
                    9656
                  ],
                  "body": {
                    "id": 8867,
                    "nodeType": "Block",
                    "src": "4900:82:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8862,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8845,
                              "src": "4957:2:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8863,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8847,
                              "src": "4961:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8864,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8849,
                              "src": "4970:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 8860,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "4943:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_MetaDog_$9333_$",
                                "typeString": "type(contract super MetaDog)"
                              }
                            },
                            "id": 8861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4949:7:26",
                            "memberName": "_update",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9656,
                            "src": "4943:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 8865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4943:32:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 8859,
                        "id": 8866,
                        "nodeType": "Return",
                        "src": "4936:39:26"
                      }
                    ]
                  },
                  "id": 8868,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "4660:7:26",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8856,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 8851,
                        "name": "ERC721Enumerable",
                        "nameLocations": [
                          "4791:16:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1811,
                        "src": "4791:16:26"
                      },
                      {
                        "id": 8852,
                        "name": "ERC721",
                        "nameLocations": [
                          "4809:6:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "4809:6:26"
                      },
                      {
                        "id": 8853,
                        "name": "ERC721Freezable",
                        "nameLocations": [
                          "4817:15:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9543,
                        "src": "4817:15:26"
                      },
                      {
                        "id": 8854,
                        "name": "ERC721Pausable",
                        "nameLocations": [
                          "4834:14:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1846,
                        "src": "4834:14:26"
                      },
                      {
                        "id": 8855,
                        "name": "ERC721MintPausable",
                        "nameLocations": [
                          "4850:18:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9657,
                        "src": "4850:18:26"
                      }
                    ],
                    "src": "4782:87:26"
                  },
                  "parameters": {
                    "id": 8850,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8845,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4685:2:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8868,
                        "src": "4677:10:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8844,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4677:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8847,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4705:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8868,
                        "src": "4697:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8846,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4697:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8849,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "4730:4:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8868,
                        "src": "4722:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8848,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4722:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4667:73:26"
                  },
                  "returnParameters": {
                    "id": 8859,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8858,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8868,
                        "src": "4887:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8857,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4887:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4886:9:26"
                  },
                  "scope": 9333,
                  "src": "4651:331:26",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    784,
                    1810
                  ],
                  "body": {
                    "id": 8885,
                    "nodeType": "Block",
                    "src": "5090:55:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8881,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8870,
                              "src": "5123:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8882,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8872,
                              "src": "5132:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "id": 8878,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "5100:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_MetaDog_$9333_$",
                                "typeString": "type(contract super MetaDog)"
                              }
                            },
                            "id": 8880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5106:16:26",
                            "memberName": "_increaseBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1810,
                            "src": "5100:22:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$",
                              "typeString": "function (address,uint128)"
                            }
                          },
                          "id": 8883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5100:38:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8884,
                        "nodeType": "ExpressionStatement",
                        "src": "5100:38:26"
                      }
                    ]
                  },
                  "id": 8886,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_increaseBalance",
                  "nameLocation": "4997:16:26",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8876,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 8874,
                        "name": "ERC721",
                        "nameLocations": [
                          "5064:6:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "5064:6:26"
                      },
                      {
                        "id": 8875,
                        "name": "ERC721Enumerable",
                        "nameLocations": [
                          "5072:16:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1811,
                        "src": "5072:16:26"
                      }
                    ],
                    "src": "5055:34:26"
                  },
                  "parameters": {
                    "id": 8873,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8870,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "5022:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8886,
                        "src": "5014:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8869,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5014:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8872,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5039:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8886,
                        "src": "5031:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 8871,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5031:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5013:32:26"
                  },
                  "returnParameters": {
                    "id": 8877,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5090:0:26"
                  },
                  "scope": 9333,
                  "src": "4988:157:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8916,
                    "nodeType": "Block",
                    "src": "5409:169:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8894,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8892,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8689,
                                "src": "5427:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 8893,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5439:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "5427:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "526573657276657320616c726561647920636f6c6c6563746564",
                              "id": 8895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5442:28:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_86fd0d4097784a56ea5868914992624d8d8f4782868b9d3094ea4c6101a42a4b",
                                "typeString": "literal_string \"Reserves already collected\""
                              },
                              "value": "Reserves already collected"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_86fd0d4097784a56ea5868914992624d8d8f4782868b9d3094ea4c6101a42a4b",
                                "typeString": "literal_string \"Reserves already collected\""
                              }
                            ],
                            "id": 8891,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5419:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5419:52:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8897,
                        "nodeType": "ExpressionStatement",
                        "src": "5419:52:26"
                      },
                      {
                        "body": {
                          "id": 8914,
                          "nodeType": "Block",
                          "src": "5521:51:26",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8909,
                                    "name": "_wallet",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8693,
                                    "src": "5541:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "id": 8911,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": true,
                                    "src": "5550:10:26",
                                    "subExpression": {
                                      "id": 8910,
                                      "name": "_tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8689,
                                      "src": "5552:8:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8908,
                                  "name": "_mint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 924,
                                  "src": "5535:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 8912,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5535:26:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8913,
                              "nodeType": "ExpressionStatement",
                              "src": "5535:26:26"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8902,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8899,
                            "src": "5501:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 8903,
                            "name": "RESERVES",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8672,
                            "src": "5506:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5501:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8915,
                        "initializationExpression": {
                          "assignments": [
                            8899
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 8899,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "5494:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 8915,
                              "src": "5486:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 8898,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5486:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 8901,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 8900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5498:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5486:13:26"
                        },
                        "isSimpleCounterLoop": false,
                        "loopExpression": {
                          "expression": {
                            "id": 8906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5516:3:26",
                            "subExpression": {
                              "id": 8905,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8899,
                              "src": "5516:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8907,
                          "nodeType": "ExpressionStatement",
                          "src": "5516:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "5481:91:26"
                      }
                    ]
                  },
                  "functionSelector": "029877b6",
                  "id": 8917,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8889,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8888,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "5399:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "5399:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "5399:9:26"
                    }
                  ],
                  "name": "collectReserves",
                  "nameLocation": "5374:15:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8887,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5389:2:26"
                  },
                  "returnParameters": {
                    "id": 8890,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5409:0:26"
                  },
                  "scope": 9333,
                  "src": "5365:213:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 8966,
                    "nodeType": "Block",
                    "src": "5649:297:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8926,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8689,
                                "src": "5667:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 8927,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5678:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "5667:12:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5265736572766573206e6f742074616b656e20796574",
                              "id": 8929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5681:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6bced965c79f5bb1d78de7e0b20ef938bfa4cbba9ed57727be381f3b50b7daa4",
                                "typeString": "literal_string \"Reserves not taken yet\""
                              },
                              "value": "Reserves not taken yet"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6bced965c79f5bb1d78de7e0b20ef938bfa4cbba9ed57727be381f3b50b7daa4",
                                "typeString": "literal_string \"Reserves not taken yet\""
                              }
                            ],
                            "id": 8925,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5659:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5659:47:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8931,
                        "nodeType": "ExpressionStatement",
                        "src": "5659:47:26"
                      },
                      {
                        "assignments": [
                          8933
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8933,
                            "mutability": "mutable",
                            "name": "recipients",
                            "nameLocation": "5724:10:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 8966,
                            "src": "5716:18:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8932,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5716:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8936,
                        "initialValue": {
                          "expression": {
                            "id": 8934,
                            "name": "recipients_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8920,
                            "src": "5737:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 8935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5749:6:26",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5737:18:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5716:39:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 8938,
                                  "name": "_tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8689,
                                  "src": "5773:8:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 8939,
                                  "name": "recipients",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8933,
                                  "src": "5784:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5773:21:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 8941,
                                "name": "MAX_SUPPLY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8687,
                                "src": "5798:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5773:35:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45786365646573206d617820737570706c79",
                              "id": 8943,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5810:20:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a50deb9a4e4ac7b8f6ff6cb7405383f03c9c1f2cef2afd88975d56d0e081a216",
                                "typeString": "literal_string \"Excedes max supply\""
                              },
                              "value": "Excedes max supply"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a50deb9a4e4ac7b8f6ff6cb7405383f03c9c1f2cef2afd88975d56d0e081a216",
                                "typeString": "literal_string \"Excedes max supply\""
                              }
                            ],
                            "id": 8937,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5765:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8944,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5765:66:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8945,
                        "nodeType": "ExpressionStatement",
                        "src": "5765:66:26"
                      },
                      {
                        "body": {
                          "id": 8964,
                          "nodeType": "Block",
                          "src": "5882:58:26",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 8957,
                                      "name": "recipients_",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8920,
                                      "src": "5902:11:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[] calldata"
                                      }
                                    },
                                    "id": 8959,
                                    "indexExpression": {
                                      "id": 8958,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8947,
                                      "src": "5914:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5902:14:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 8961,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": true,
                                    "src": "5918:10:26",
                                    "subExpression": {
                                      "id": 8960,
                                      "name": "_tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8689,
                                      "src": "5920:8:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8956,
                                  "name": "_mint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 924,
                                  "src": "5896:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 8962,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5896:33:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8963,
                              "nodeType": "ExpressionStatement",
                              "src": "5896:33:26"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8950,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8947,
                            "src": "5861:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 8951,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8933,
                            "src": "5865:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5861:14:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8965,
                        "initializationExpression": {
                          "assignments": [
                            8947
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 8947,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "5854:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 8965,
                              "src": "5846:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 8946,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5846:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 8949,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 8948,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5858:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5846:13:26"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 8954,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5877:3:26",
                            "subExpression": {
                              "id": 8953,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8947,
                              "src": "5877:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8955,
                          "nodeType": "ExpressionStatement",
                          "src": "5877:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "5841:99:26"
                      }
                    ]
                  },
                  "functionSelector": "163e1e61",
                  "id": 8967,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8923,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8922,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "5639:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "5639:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "5639:9:26"
                    }
                  ],
                  "name": "gift",
                  "nameLocation": "5593:4:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8921,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8920,
                        "mutability": "mutable",
                        "name": "recipients_",
                        "nameLocation": "5617:11:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8967,
                        "src": "5598:30:26",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8918,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5598:7:26",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 8919,
                          "nodeType": "ArrayTypeName",
                          "src": "5598:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5597:32:26"
                  },
                  "returnParameters": {
                    "id": 8924,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5649:0:26"
                  },
                  "scope": 9333,
                  "src": "5584:362:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 8978,
                    "nodeType": "Block",
                    "src": "6247:62:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8975,
                              "name": "whitelistMerkleRoot_",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8969,
                              "src": "6281:20:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 8974,
                            "name": "_setWhitelistMerkleRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9760,
                            "src": "6257:23:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32)"
                            }
                          },
                          "id": 8976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6257:45:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8977,
                        "nodeType": "ExpressionStatement",
                        "src": "6257:45:26"
                      }
                    ]
                  },
                  "functionSelector": "bd32fb66",
                  "id": 8979,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8972,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8971,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "6237:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "6237:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "6237:9:26"
                    }
                  ],
                  "name": "setWhitelistMerkleRoot",
                  "nameLocation": "6175:22:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8970,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8969,
                        "mutability": "mutable",
                        "name": "whitelistMerkleRoot_",
                        "nameLocation": "6206:20:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 8979,
                        "src": "6198:28:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 8968,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6198:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6197:30:26"
                  },
                  "returnParameters": {
                    "id": 8973,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6247:0:26"
                  },
                  "scope": 9333,
                  "src": "6166:143:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 8987,
                    "nodeType": "Block",
                    "src": "6372:46:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 8984,
                            "name": "_disableWhitelistMerkleRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9864,
                            "src": "6382:27:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 8985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6382:29:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8986,
                        "nodeType": "ExpressionStatement",
                        "src": "6382:29:26"
                      }
                    ]
                  },
                  "functionSelector": "b4402979",
                  "id": 8988,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8982,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8981,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "6362:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "6362:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "6362:9:26"
                    }
                  ],
                  "name": "disableWhitelistMerkleRoot",
                  "nameLocation": "6324:26:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8980,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6350:2:26"
                  },
                  "returnParameters": {
                    "id": 8983,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6372:0:26"
                  },
                  "scope": 9333,
                  "src": "6315:103:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9071,
                    "nodeType": "Block",
                    "src": "6535:574:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9003,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9001,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8689,
                                "src": "6553:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 9002,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6564:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "6553:12:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5265736572766573206e6f742074616b656e20796574",
                              "id": 9004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6567:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6bced965c79f5bb1d78de7e0b20ef938bfa4cbba9ed57727be381f3b50b7daa4",
                                "typeString": "literal_string \"Reserves not taken yet\""
                              },
                              "value": "Reserves not taken yet"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6bced965c79f5bb1d78de7e0b20ef938bfa4cbba9ed57727be381f3b50b7daa4",
                                "typeString": "literal_string \"Reserves not taken yet\""
                              }
                            ],
                            "id": 9000,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6545:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6545:47:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9006,
                        "nodeType": "ExpressionStatement",
                        "src": "6545:47:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9010,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9008,
                                  "name": "_tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8689,
                                  "src": "6610:8:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 9009,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8990,
                                  "src": "6621:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6610:16:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 9011,
                                "name": "MAX_SUPPLY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8687,
                                "src": "6630:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6610:30:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45786365656473206d617820737570706c79",
                              "id": 9013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6642:20:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_833ac5256bd749e59e09b3d79e65697a9a895b45768ee0e3858ea9958c2aa611",
                                "typeString": "literal_string \"Exceeds max supply\""
                              },
                              "value": "Exceeds max supply"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_833ac5256bd749e59e09b3d79e65697a9a895b45768ee0e3858ea9958c2aa611",
                                "typeString": "literal_string \"Exceeds max supply\""
                              }
                            ],
                            "id": 9007,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6602:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6602:61:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9015,
                        "nodeType": "ExpressionStatement",
                        "src": "6602:61:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9018,
                                  "name": "allowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8992,
                                  "src": "6711:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 9019,
                                  "name": "proof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8995,
                                  "src": "6722:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                    "typeString": "bytes32[] calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                    "typeString": "bytes32[] calldata"
                                  }
                                ],
                                "id": 9017,
                                "name": "_validateWhitelistMerkleProof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9807,
                                "src": "6681:29:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_array$_t_bytes32_$dyn_calldata_ptr_$returns$_t_bool_$",
                                  "typeString": "function (uint256,bytes32[] calldata) view returns (bool)"
                                }
                              },
                              "id": 9020,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6681:47:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c696564",
                              "id": 9021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6730:36:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_807a9d79b6cf9fc49403c538b8886ada3fdc029cba2b7defe939e41cbd2b88ba",
                                "typeString": "literal_string \"Invalid Merkle Tree proof supplied\""
                              },
                              "value": "Invalid Merkle Tree proof supplied"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_807a9d79b6cf9fc49403c538b8886ada3fdc029cba2b7defe939e41cbd2b88ba",
                                "typeString": "literal_string \"Invalid Merkle Tree proof supplied\""
                              }
                            ],
                            "id": 9016,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6673:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6673:94:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9023,
                        "nodeType": "ExpressionStatement",
                        "src": "6673:94:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9030,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "id": 9025,
                                    "name": "_addressToMinted",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8697,
                                    "src": "6785:16:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 9028,
                                  "indexExpression": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 9026,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2291,
                                      "src": "6802:10:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 9027,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6802:12:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6785:30:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 9029,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8990,
                                  "src": "6818:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6785:38:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 9031,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8992,
                                "src": "6827:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6785:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "457863656564732077686974656c69737420616c6c6f77616e6365",
                              "id": 9033,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6838:29:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_50b59ba41046a3ca2a06273d4ab646fe1ea63c7b768898bfc023de199a1a5aa6",
                                "typeString": "literal_string \"Exceeds whitelist allowance\""
                              },
                              "value": "Exceeds whitelist allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_50b59ba41046a3ca2a06273d4ab646fe1ea63c7b768898bfc023de199a1a5aa6",
                                "typeString": "literal_string \"Exceeds whitelist allowance\""
                              }
                            ],
                            "id": 9024,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6777:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6777:91:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9035,
                        "nodeType": "ExpressionStatement",
                        "src": "6777:91:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9039,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9037,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8990,
                                  "src": "6886:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 9038,
                                  "name": "PRICE_IN_WEI_WHITELIST",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8675,
                                  "src": "6894:22:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6886:30:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 9040,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "6920:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6924:5:26",
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "6920:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6886:43:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e76616c69642066756e64732070726f7669646564",
                              "id": 9043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6931:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a64e722d99fb5b1ee22a93b07a631a01d363177a90d77a3b3cc5e4cb5c81af74",
                                "typeString": "literal_string \"Invalid funds provided\""
                              },
                              "value": "Invalid funds provided"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a64e722d99fb5b1ee22a93b07a631a01d363177a90d77a3b3cc5e4cb5c81af74",
                                "typeString": "literal_string \"Invalid funds provided\""
                              }
                            ],
                            "id": 9036,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6878:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6878:78:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9045,
                        "nodeType": "ExpressionStatement",
                        "src": "6878:78:26"
                      },
                      {
                        "expression": {
                          "id": 9051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 9046,
                              "name": "_addressToMinted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8697,
                              "src": "6966:16:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9049,
                            "indexExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9047,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "6983:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 9048,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6983:12:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6966:30:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 9050,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8990,
                            "src": "7000:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6966:39:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9052,
                        "nodeType": "ExpressionStatement",
                        "src": "6966:39:26"
                      },
                      {
                        "body": {
                          "id": 9069,
                          "nodeType": "Block",
                          "src": "7047:56:26",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 9063,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2291,
                                      "src": "7067:10:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 9064,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7067:12:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 9066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": true,
                                    "src": "7081:10:26",
                                    "subExpression": {
                                      "id": 9065,
                                      "name": "_tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8689,
                                      "src": "7083:8:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9062,
                                  "name": "_mint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 924,
                                  "src": "7061:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 9067,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7061:31:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9068,
                              "nodeType": "ExpressionStatement",
                              "src": "7061:31:26"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9056,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9054,
                            "src": "7031:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 9057,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8990,
                            "src": "7035:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7031:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9070,
                        "initializationExpression": {
                          "assignments": [
                            9054
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9054,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "7028:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 9070,
                              "src": "7020:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9053,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "7020:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9055,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "7020:9:26"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 9060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "7042:3:26",
                            "subExpression": {
                              "id": 9059,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9054,
                              "src": "7042:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9061,
                          "nodeType": "ExpressionStatement",
                          "src": "7042:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "7015:88:26"
                      }
                    ]
                  },
                  "functionSelector": "c4be5b59",
                  "id": 9072,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8998,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8997,
                        "name": "nonReentrant",
                        "nameLocations": [
                          "6522:12:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2502,
                        "src": "6522:12:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "6522:12:26"
                    }
                  ],
                  "name": "whitelistMint",
                  "nameLocation": "6433:13:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8996,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8990,
                        "mutability": "mutable",
                        "name": "count",
                        "nameLocation": "6455:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9072,
                        "src": "6447:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8989,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6447:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8992,
                        "mutability": "mutable",
                        "name": "allowance",
                        "nameLocation": "6470:9:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9072,
                        "src": "6462:17:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8991,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6462:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8995,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "6500:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9072,
                        "src": "6481:24:26",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8993,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "6481:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 8994,
                          "nodeType": "ArrayTypeName",
                          "src": "6481:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6446:60:26"
                  },
                  "returnParameters": {
                    "id": 8999,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6535:0:26"
                  },
                  "scope": 9333,
                  "src": "6424:685:26",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9084,
                    "nodeType": "Block",
                    "src": "7375:78:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9077,
                            "name": "_disableWhitelistMerkleRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9864,
                            "src": "7385:27:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 9078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7385:29:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9079,
                        "nodeType": "ExpressionStatement",
                        "src": "7385:29:26"
                      },
                      {
                        "expression": {
                          "id": 9082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9080,
                            "name": "_publicSaleOpen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8700,
                            "src": "7424:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 9081,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7442:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "7424:22:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9083,
                        "nodeType": "ExpressionStatement",
                        "src": "7424:22:26"
                      }
                    ]
                  },
                  "functionSelector": "0c1c972a",
                  "id": 9085,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9075,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9074,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "7365:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "7365:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "7365:9:26"
                    }
                  ],
                  "name": "startPublicSale",
                  "nameLocation": "7338:15:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9073,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7353:2:26"
                  },
                  "returnParameters": {
                    "id": 9076,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7375:0:26"
                  },
                  "scope": 9333,
                  "src": "7329:124:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9155,
                    "nodeType": "Block",
                    "src": "7522:516:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 9095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9093,
                                "name": "_whitelistMerkleRoot",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9750,
                                "src": "7540:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 9094,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7564:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7540:25:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5075626c69632073616c65206e6f7420616374697665",
                              "id": 9096,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7567:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_990df94dcf47bd3323f0a6a9b97580c64f4d76b2166d94a5559ce52ee04c9be4",
                                "typeString": "literal_string \"Public sale not active\""
                              },
                              "value": "Public sale not active"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_990df94dcf47bd3323f0a6a9b97580c64f4d76b2166d94a5559ce52ee04c9be4",
                                "typeString": "literal_string \"Public sale not active\""
                              }
                            ],
                            "id": 9092,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7532:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7532:60:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9098,
                        "nodeType": "ExpressionStatement",
                        "src": "7532:60:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9100,
                              "name": "_publicSaleOpen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8700,
                              "src": "7610:15:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5075626c69632073616c65206e6f7420616374697665",
                              "id": 9101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7627:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_990df94dcf47bd3323f0a6a9b97580c64f4d76b2166d94a5559ce52ee04c9be4",
                                "typeString": "literal_string \"Public sale not active\""
                              },
                              "value": "Public sale not active"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_990df94dcf47bd3323f0a6a9b97580c64f4d76b2166d94a5559ce52ee04c9be4",
                                "typeString": "literal_string \"Public sale not active\""
                              }
                            ],
                            "id": 9099,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7602:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7602:50:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9103,
                        "nodeType": "ExpressionStatement",
                        "src": "7602:50:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9107,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9105,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8689,
                                "src": "7670:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 9106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7681:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7670:12:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5265736572766573206e6f742074616b656e20796574",
                              "id": 9108,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7684:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6bced965c79f5bb1d78de7e0b20ef938bfa4cbba9ed57727be381f3b50b7daa4",
                                "typeString": "literal_string \"Reserves not taken yet\""
                              },
                              "value": "Reserves not taken yet"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6bced965c79f5bb1d78de7e0b20ef938bfa4cbba9ed57727be381f3b50b7daa4",
                                "typeString": "literal_string \"Reserves not taken yet\""
                              }
                            ],
                            "id": 9104,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7662:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7662:47:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9110,
                        "nodeType": "ExpressionStatement",
                        "src": "7662:47:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9116,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9114,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9112,
                                  "name": "_tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8689,
                                  "src": "7727:8:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 9113,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9087,
                                  "src": "7738:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7727:16:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 9115,
                                "name": "MAX_SUPPLY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8687,
                                "src": "7747:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7727:30:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45786365656473206d617820737570706c79",
                              "id": 9117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7759:20:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_833ac5256bd749e59e09b3d79e65697a9a895b45768ee0e3858ea9958c2aa611",
                                "typeString": "literal_string \"Exceeds max supply\""
                              },
                              "value": "Exceeds max supply"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_833ac5256bd749e59e09b3d79e65697a9a895b45768ee0e3858ea9958c2aa611",
                                "typeString": "literal_string \"Exceeds max supply\""
                              }
                            ],
                            "id": 9111,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7719:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7719:61:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9119,
                        "nodeType": "ExpressionStatement",
                        "src": "7719:61:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9123,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9121,
                                "name": "count",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9087,
                                "src": "7798:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 9122,
                                "name": "MAX_PER_TX",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8684,
                                "src": "7806:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7798:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45786365656473206d617820706572207472616e73616374696f6e",
                              "id": 9124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7818:29:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c4f84e778921ac4b1cbaa63599c13d15c4a27e87eb1ac52dfcb76b65d32fca75",
                                "typeString": "literal_string \"Exceeds max per transaction\""
                              },
                              "value": "Exceeds max per transaction"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c4f84e778921ac4b1cbaa63599c13d15c4a27e87eb1ac52dfcb76b65d32fca75",
                                "typeString": "literal_string \"Exceeds max per transaction\""
                              }
                            ],
                            "id": 9120,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7790:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7790:58:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9126,
                        "nodeType": "ExpressionStatement",
                        "src": "7790:58:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9133,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9130,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9128,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9087,
                                  "src": "7866:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 9129,
                                  "name": "PRICE_IN_WEI_PUBLIC",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8678,
                                  "src": "7874:19:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7866:27:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 9131,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "7897:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9132,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7901:5:26",
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "7897:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7866:40:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e76616c69642066756e64732070726f7669646564",
                              "id": 9134,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7908:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a64e722d99fb5b1ee22a93b07a631a01d363177a90d77a3b3cc5e4cb5c81af74",
                                "typeString": "literal_string \"Invalid funds provided\""
                              },
                              "value": "Invalid funds provided"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a64e722d99fb5b1ee22a93b07a631a01d363177a90d77a3b3cc5e4cb5c81af74",
                                "typeString": "literal_string \"Invalid funds provided\""
                              }
                            ],
                            "id": 9127,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7858:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7858:75:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9136,
                        "nodeType": "ExpressionStatement",
                        "src": "7858:75:26"
                      },
                      {
                        "body": {
                          "id": 9153,
                          "nodeType": "Block",
                          "src": "7976:56:26",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 9147,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2291,
                                      "src": "7996:10:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 9148,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7996:12:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 9150,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": true,
                                    "src": "8010:10:26",
                                    "subExpression": {
                                      "id": 9149,
                                      "name": "_tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8689,
                                      "src": "8012:8:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9146,
                                  "name": "_mint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 924,
                                  "src": "7990:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 9151,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7990:31:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9152,
                              "nodeType": "ExpressionStatement",
                              "src": "7990:31:26"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9140,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9138,
                            "src": "7960:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 9141,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9087,
                            "src": "7964:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7960:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9154,
                        "initializationExpression": {
                          "assignments": [
                            9138
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9138,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "7957:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 9154,
                              "src": "7949:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9137,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "7949:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9139,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "7949:9:26"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 9144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "7971:3:26",
                            "subExpression": {
                              "id": 9143,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9138,
                              "src": "7971:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9145,
                          "nodeType": "ExpressionStatement",
                          "src": "7971:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "7944:88:26"
                      }
                    ]
                  },
                  "functionSelector": "2db11544",
                  "id": 9156,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9090,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9089,
                        "name": "nonReentrant",
                        "nameLocations": [
                          "7509:12:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2502,
                        "src": "7509:12:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "7509:12:26"
                    }
                  ],
                  "name": "publicMint",
                  "nameLocation": "7468:10:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9088,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9087,
                        "mutability": "mutable",
                        "name": "count",
                        "nameLocation": "7487:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9156,
                        "src": "7479:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9086,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7479:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7478:15:26"
                  },
                  "returnParameters": {
                    "id": 9091,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7522:0:26"
                  },
                  "scope": 9333,
                  "src": "7459:579:26",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9171,
                    "nodeType": "Block",
                    "src": "8295:56:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9166,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "8330:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MetaDog_$9333",
                                      "typeString": "contract MetaDog"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MetaDog_$9333",
                                      "typeString": "contract MetaDog"
                                    }
                                  ],
                                  "id": 9165,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8322:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 9164,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8322:7:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 9167,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8322:13:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 9168,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8336:7:26",
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "src": "8322:21:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 9161,
                              "name": "_wallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8693,
                              "src": "8305:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 9163,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8313:8:26",
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "src": "8305:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 9169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8305:39:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9170,
                        "nodeType": "ExpressionStatement",
                        "src": "8305:39:26"
                      }
                    ]
                  },
                  "functionSelector": "3ccfd60b",
                  "id": 9172,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9159,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9158,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "8285:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "8285:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "8285:9:26"
                    }
                  ],
                  "name": "withdraw",
                  "nameLocation": "8267:8:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9157,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8275:2:26"
                  },
                  "returnParameters": {
                    "id": 9160,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8295:0:26"
                  },
                  "scope": 9333,
                  "src": "8258:93:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9179,
                    "nodeType": "Block",
                    "src": "8405:31:26",
                    "statements": [
                      {
                        "expression": {
                          "id": 9177,
                          "name": "_wallet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8693,
                          "src": "8422:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 9176,
                        "id": 9178,
                        "nodeType": "Return",
                        "src": "8415:14:26"
                      }
                    ]
                  },
                  "functionSelector": "521eb273",
                  "id": 9180,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "wallet",
                  "nameLocation": "8366:6:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9173,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8372:2:26"
                  },
                  "returnParameters": {
                    "id": 9176,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9175,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9180,
                        "src": "8396:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9174,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8396:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8395:9:26"
                  },
                  "scope": 9333,
                  "src": "8357:79:26",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1424
                  ],
                  "body": {
                    "id": 9193,
                    "nodeType": "Block",
                    "src": "8505:36:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9190,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9182,
                              "src": "8526:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 9187,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "8515:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_MetaDog_$9333_$",
                                "typeString": "type(contract super MetaDog)"
                              }
                            },
                            "id": 9189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8521:4:26",
                            "memberName": "burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1424,
                            "src": "8515:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 9191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8515:19:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9192,
                        "nodeType": "ExpressionStatement",
                        "src": "8515:19:26"
                      }
                    ]
                  },
                  "functionSelector": "42966c68",
                  "id": 9194,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "8451:4:26",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9185,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 9184,
                        "name": "ERC721Burnable",
                        "nameLocations": [
                          "8489:14:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1425,
                        "src": "8489:14:26"
                      }
                    ],
                    "src": "8480:24:26"
                  },
                  "parameters": {
                    "id": 9183,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9182,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8464:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9194,
                        "src": "8456:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9181,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8456:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8455:17:26"
                  },
                  "returnParameters": {
                    "id": 9186,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8505:0:26"
                  },
                  "scope": 9333,
                  "src": "8442:99:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9204,
                    "nodeType": "Block",
                    "src": "8584:32:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 9199,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "8594:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_MetaDog_$9333_$",
                                "typeString": "type(contract super MetaDog)"
                              }
                            },
                            "id": 9201,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8600:7:26",
                            "memberName": "_freeze",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9468,
                            "src": "8594:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 9202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8594:15:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9203,
                        "nodeType": "ExpressionStatement",
                        "src": "8594:15:26"
                      }
                    ]
                  },
                  "functionSelector": "62a5af3b",
                  "id": 9205,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9197,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9196,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "8574:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "8574:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "8574:9:26"
                    }
                  ],
                  "name": "freeze",
                  "nameLocation": "8556:6:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9195,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8562:2:26"
                  },
                  "returnParameters": {
                    "id": 9198,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8584:0:26"
                  },
                  "scope": 9333,
                  "src": "8547:69:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9216,
                    "nodeType": "Block",
                    "src": "8919:64:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9213,
                              "name": "proxyRegistryAddress_",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9207,
                              "src": "8954:21:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9212,
                            "name": "_setProxyRegistryAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9685,
                            "src": "8929:24:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 9214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8929:47:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9215,
                        "nodeType": "ExpressionStatement",
                        "src": "8929:47:26"
                      }
                    ]
                  },
                  "functionSelector": "d26ea6c0",
                  "id": 9217,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9210,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9209,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "8909:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "8909:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "8909:9:26"
                    }
                  ],
                  "name": "setProxyRegistryAddress",
                  "nameLocation": "8845:23:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9208,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9207,
                        "mutability": "mutable",
                        "name": "proxyRegistryAddress_",
                        "nameLocation": "8877:21:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9217,
                        "src": "8869:29:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9206,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8869:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8868:31:26"
                  },
                  "returnParameters": {
                    "id": 9211,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8919:0:26"
                  },
                  "scope": 9333,
                  "src": "8836:147:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    575,
                    1377,
                    9730
                  ],
                  "body": {
                    "id": 9236,
                    "nodeType": "Block",
                    "src": "9183:64:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9232,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9219,
                              "src": "9223:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9233,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9221,
                              "src": "9231:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 9230,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "9200:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_MetaDog_$9333_$",
                                "typeString": "type(contract super MetaDog)"
                              }
                            },
                            "id": 9231,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9206:16:26",
                            "memberName": "isApprovedForAll",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9730,
                            "src": "9200:22:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 9234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9200:40:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9229,
                        "id": 9235,
                        "nodeType": "Return",
                        "src": "9193:47:26"
                      }
                    ]
                  },
                  "functionSelector": "e985e9c5",
                  "id": 9237,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "8998:16:26",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9226,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 9223,
                        "name": "IERC721",
                        "nameLocations": [
                          "9116:7:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1378,
                        "src": "9116:7:26"
                      },
                      {
                        "id": 9224,
                        "name": "ERC721",
                        "nameLocations": [
                          "9125:6:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "9125:6:26"
                      },
                      {
                        "id": 9225,
                        "name": "ERC721OpenSeaGassLess",
                        "nameLocations": [
                          "9133:21:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9731,
                        "src": "9133:21:26"
                      }
                    ],
                    "src": "9107:48:26"
                  },
                  "parameters": {
                    "id": 9222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9219,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nameLocation": "9032:6:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9237,
                        "src": "9024:14:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9218,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9024:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9221,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "9056:8:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9237,
                        "src": "9048:16:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9220,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9048:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9014:56:26"
                  },
                  "returnParameters": {
                    "id": 9229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9228,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9237,
                        "src": "9173:4:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9227,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9173:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9172:6:26"
                  },
                  "scope": 9333,
                  "src": "8989:258:26",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9245,
                    "nodeType": "Block",
                    "src": "9501:25:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9242,
                            "name": "_pause",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2452,
                            "src": "9511:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 9243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9511:8:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9244,
                        "nodeType": "ExpressionStatement",
                        "src": "9511:8:26"
                      }
                    ]
                  },
                  "functionSelector": "8456cb59",
                  "id": 9246,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9240,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9239,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "9491:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "9491:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9491:9:26"
                    }
                  ],
                  "name": "pause",
                  "nameLocation": "9476:5:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9238,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9481:2:26"
                  },
                  "returnParameters": {
                    "id": 9241,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9501:0:26"
                  },
                  "scope": 9333,
                  "src": "9467:59:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9254,
                    "nodeType": "Block",
                    "src": "9568:27:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9251,
                            "name": "_unpause",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2468,
                            "src": "9578:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 9252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9578:10:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9253,
                        "nodeType": "ExpressionStatement",
                        "src": "9578:10:26"
                      }
                    ]
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 9255,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9249,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9248,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "9558:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "9558:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9558:9:26"
                    }
                  ],
                  "name": "unpause",
                  "nameLocation": "9541:7:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9247,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9548:2:26"
                  },
                  "returnParameters": {
                    "id": 9250,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9568:0:26"
                  },
                  "scope": 9333,
                  "src": "9532:63:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9263,
                    "nodeType": "Block",
                    "src": "9639:29:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9260,
                            "name": "_pauseMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9606,
                            "src": "9649:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 9261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9649:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9262,
                        "nodeType": "ExpressionStatement",
                        "src": "9649:12:26"
                      }
                    ]
                  },
                  "functionSelector": "cd85cdb5",
                  "id": 9264,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9258,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9257,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "9629:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "9629:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9629:9:26"
                    }
                  ],
                  "name": "pauseMint",
                  "nameLocation": "9610:9:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9256,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9619:2:26"
                  },
                  "returnParameters": {
                    "id": 9259,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9639:0:26"
                  },
                  "scope": 9333,
                  "src": "9601:67:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9272,
                    "nodeType": "Block",
                    "src": "9714:31:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9269,
                            "name": "_unpauseMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9616,
                            "src": "9724:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 9270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9724:14:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9271,
                        "nodeType": "ExpressionStatement",
                        "src": "9724:14:26"
                      }
                    ]
                  },
                  "functionSelector": "1a8bd2da",
                  "id": 9273,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9267,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9266,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "9704:9:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 58,
                        "src": "9704:9:26"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9704:9:26"
                    }
                  ],
                  "name": "unpauseMint",
                  "nameLocation": "9683:11:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9265,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9694:2:26"
                  },
                  "returnParameters": {
                    "id": 9268,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9714:0:26"
                  },
                  "scope": 9333,
                  "src": "9674:71:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    405,
                    1489,
                    1874
                  ],
                  "body": {
                    "id": 9331,
                    "nodeType": "Block",
                    "src": "10141:403:26",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 9329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 9324,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 9317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 9310,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 9303,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 9296,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      },
                                      "id": 9289,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 9284,
                                        "name": "interfaceId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9275,
                                        "src": "10158:11:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "id": 9286,
                                              "name": "Ownable",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 147,
                                              "src": "10178:7:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_Ownable_$147_$",
                                                "typeString": "type(contract Ownable)"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_type$_t_contract$_Ownable_$147_$",
                                                "typeString": "type(contract Ownable)"
                                              }
                                            ],
                                            "id": 9285,
                                            "name": "type",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -27,
                                            "src": "10173:4:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 9287,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "10173:13:26",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_meta_type_t_contract$_Ownable_$147",
                                            "typeString": "type(contract Ownable)"
                                          }
                                        },
                                        "id": 9288,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "10187:11:26",
                                        "memberName": "interfaceId",
                                        "nodeType": "MemberAccess",
                                        "src": "10173:25:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "src": "10158:40:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "||",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      },
                                      "id": 9295,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 9290,
                                        "name": "interfaceId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9275,
                                        "src": "10202:11:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "id": 9292,
                                              "name": "ERC721Burnable",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1425,
                                              "src": "10222:14:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_ERC721Burnable_$1425_$",
                                                "typeString": "type(contract ERC721Burnable)"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_type$_t_contract$_ERC721Burnable_$1425_$",
                                                "typeString": "type(contract ERC721Burnable)"
                                              }
                                            ],
                                            "id": 9291,
                                            "name": "type",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -27,
                                            "src": "10217:4:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 9293,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "10217:20:26",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_meta_type_t_contract$_ERC721Burnable_$1425",
                                            "typeString": "type(contract ERC721Burnable)"
                                          }
                                        },
                                        "id": 9294,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "10238:11:26",
                                        "memberName": "interfaceId",
                                        "nodeType": "MemberAccess",
                                        "src": "10217:32:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "src": "10202:47:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "10158:91:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 9302,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 9297,
                                      "name": "interfaceId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9275,
                                      "src": "10265:11:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 9299,
                                            "name": "ERC721Enumerable",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1811,
                                            "src": "10285:16:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_ERC721Enumerable_$1811_$",
                                              "typeString": "type(contract ERC721Enumerable)"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_type$_t_contract$_ERC721Enumerable_$1811_$",
                                              "typeString": "type(contract ERC721Enumerable)"
                                            }
                                          ],
                                          "id": 9298,
                                          "name": "type",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -27,
                                          "src": "10280:4:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 9300,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10280:22:26",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_meta_type_t_contract$_ERC721Enumerable_$1811",
                                          "typeString": "type(contract ERC721Enumerable)"
                                        }
                                      },
                                      "id": 9301,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "10303:11:26",
                                      "memberName": "interfaceId",
                                      "nodeType": "MemberAccess",
                                      "src": "10280:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "10265:49:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "10158:156:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "id": 9309,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 9304,
                                    "name": "interfaceId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9275,
                                    "src": "10318:11:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 9306,
                                          "name": "ERC721Whitelist",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9865,
                                          "src": "10338:15:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC721Whitelist_$9865_$",
                                            "typeString": "type(contract ERC721Whitelist)"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_contract$_ERC721Whitelist_$9865_$",
                                            "typeString": "type(contract ERC721Whitelist)"
                                          }
                                        ],
                                        "id": 9305,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -27,
                                        "src": "10333:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 9307,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10333:21:26",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_contract$_ERC721Whitelist_$9865",
                                        "typeString": "type(contract ERC721Whitelist)"
                                      }
                                    },
                                    "id": 9308,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "10355:11:26",
                                    "memberName": "interfaceId",
                                    "nodeType": "MemberAccess",
                                    "src": "10333:33:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "src": "10318:48:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "10158:208:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 9316,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9311,
                                  "name": "interfaceId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9275,
                                  "src": "10382:11:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 9313,
                                        "name": "ERC721Freezable",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9543,
                                        "src": "10402:15:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC721Freezable_$9543_$",
                                          "typeString": "type(contract ERC721Freezable)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_contract$_ERC721Freezable_$9543_$",
                                          "typeString": "type(contract ERC721Freezable)"
                                        }
                                      ],
                                      "id": 9312,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -27,
                                      "src": "10397:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 9314,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10397:21:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_contract$_ERC721Freezable_$9543",
                                      "typeString": "type(contract ERC721Freezable)"
                                    }
                                  },
                                  "id": 9315,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "10419:11:26",
                                  "memberName": "interfaceId",
                                  "nodeType": "MemberAccess",
                                  "src": "10397:33:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "10382:48:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "10158:272:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 9323,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9318,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9275,
                                "src": "10434:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 9320,
                                      "name": "ERC721MintPausable",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9657,
                                      "src": "10454:18:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721MintPausable_$9657_$",
                                        "typeString": "type(contract ERC721MintPausable)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721MintPausable_$9657_$",
                                        "typeString": "type(contract ERC721MintPausable)"
                                      }
                                    ],
                                    "id": 9319,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "10449:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 9321,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10449:24:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_ERC721MintPausable_$9657",
                                    "typeString": "type(contract ERC721MintPausable)"
                                  }
                                },
                                "id": 9322,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "10474:11:26",
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "10449:36:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "10434:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "10158:327:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 9327,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9275,
                                "src": "10525:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 9325,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "10501:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_MetaDog_$9333_$",
                                  "typeString": "type(contract super MetaDog)"
                                }
                              },
                              "id": 9326,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "10507:17:26",
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1874,
                              "src": "10501:23:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 9328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10501:36:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10158:379:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9283,
                        "id": 9330,
                        "nodeType": "Return",
                        "src": "10151:386:26"
                      }
                    ]
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 9332,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "9974:17:26",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9280,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 9277,
                        "name": "ERC721",
                        "nameLocations": [
                          "10073:6:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "10073:6:26"
                      },
                      {
                        "id": 9278,
                        "name": "ERC721Enumerable",
                        "nameLocations": [
                          "10081:16:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1811,
                        "src": "10081:16:26"
                      },
                      {
                        "id": 9279,
                        "name": "ERC721Royalty",
                        "nameLocations": [
                          "10099:13:26"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1875,
                        "src": "10099:13:26"
                      }
                    ],
                    "src": "10064:49:26"
                  },
                  "parameters": {
                    "id": 9276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9275,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "9999:11:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 9332,
                        "src": "9992:18:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 9274,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "9992:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9991:20:26"
                  },
                  "returnParameters": {
                    "id": 9283,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9282,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9332,
                        "src": "10131:4:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9281,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "10131:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10130:6:26"
                  },
                  "scope": 9333,
                  "src": "9965:579:26",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 9334,
              "src": "1147:9399:26",
              "usedErrors": [
                13,
                18,
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256,
                1462,
                1465,
                2044,
                2049,
                2058,
                2065,
                2383,
                2386,
                2483,
                8705
              ],
              "usedEvents": [
                24,
                1277,
                1286,
                1295,
                2375,
                2380,
                9419,
                9555,
                9559
              ]
            }
          ],
          "src": "59:10488:26"
        },
        "id": 26
      },
      "contracts/extensions/ERC721Batch.sol": {
        "ast": {
          "absolutePath": "contracts/extensions/ERC721Batch.sol",
          "exportedSymbols": {
            "ERC721": [
              1261
            ],
            "ERC721Batch": [
              9407
            ]
          },
          "id": 9408,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9335,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".24"
              ],
              "nodeType": "PragmaDirective",
              "src": "309:24:27"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "id": 9337,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9408,
              "sourceUnit": 1262,
              "src": "335:73:27",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9336,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "344:6:27",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9338,
                    "name": "ERC721",
                    "nameLocations": [
                      "443:6:27"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1261,
                    "src": "443:6:27"
                  },
                  "id": 9339,
                  "nodeType": "InheritanceSpecifier",
                  "src": "443:6:27"
                }
              ],
              "canonicalName": "ERC721Batch",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9407,
              "linearizedBaseContracts": [
                9407,
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721Batch",
              "nameLocation": "428:11:27",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 9370,
                    "nodeType": "Block",
                    "src": "546:126:27",
                    "statements": [
                      {
                        "body": {
                          "id": 9368,
                          "nodeType": "Block",
                          "src": "603:63:27",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9361,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9341,
                                    "src": "630:5:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 9362,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9343,
                                    "src": "637:3:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 9363,
                                      "name": "_tokenIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9346,
                                      "src": "642:9:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 9365,
                                    "indexExpression": {
                                      "id": 9364,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9350,
                                      "src": "652:1:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "642:12:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9360,
                                  "name": "transferFrom",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 621,
                                  "src": "617:12:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 9366,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "617:38:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9367,
                              "nodeType": "ExpressionStatement",
                              "src": "617:38:27"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9353,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9350,
                            "src": "576:1:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 9354,
                              "name": "_tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9346,
                              "src": "580:9:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 9355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "590:6:27",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "580:16:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "576:20:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9369,
                        "initializationExpression": {
                          "assignments": [
                            9350
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9350,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "569:1:27",
                              "nodeType": "VariableDeclaration",
                              "scope": 9369,
                              "src": "561:9:27",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9349,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "561:7:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9352,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 9351,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "573:1:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "561:13:27"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 9358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "598:3:27",
                            "subExpression": {
                              "id": 9357,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9350,
                              "src": "598:1:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9359,
                          "nodeType": "ExpressionStatement",
                          "src": "598:3:27"
                        },
                        "nodeType": "ForStatement",
                        "src": "556:110:27"
                      }
                    ]
                  },
                  "functionSelector": "f3993d11",
                  "id": 9371,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "batchTransferFrom",
                  "nameLocation": "465:17:27",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9347,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9341,
                        "mutability": "mutable",
                        "name": "_from",
                        "nameLocation": "491:5:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 9371,
                        "src": "483:13:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9340,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "483:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9343,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "506:3:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 9371,
                        "src": "498:11:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9342,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "498:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9346,
                        "mutability": "mutable",
                        "name": "_tokenIds",
                        "nameLocation": "528:9:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 9371,
                        "src": "511:26:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9344,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "511:7:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9345,
                          "nodeType": "ArrayTypeName",
                          "src": "511:9:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "482:56:27"
                  },
                  "returnParameters": {
                    "id": 9348,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "546:0:27"
                  },
                  "scope": 9407,
                  "src": "456:216:27",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9405,
                    "nodeType": "Block",
                    "src": "792:137:27",
                    "statements": [
                      {
                        "body": {
                          "id": 9403,
                          "nodeType": "Block",
                          "src": "849:74:27",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9395,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9373,
                                    "src": "880:5:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 9396,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9375,
                                    "src": "887:3:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 9397,
                                      "name": "_tokenIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9378,
                                      "src": "892:9:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 9399,
                                    "indexExpression": {
                                      "id": 9398,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9384,
                                      "src": "902:1:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "892:12:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 9400,
                                    "name": "data_",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9380,
                                    "src": "906:5:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 9394,
                                  "name": "safeTransferFrom",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    639,
                                    669
                                  ],
                                  "referencedDeclaration": 669,
                                  "src": "863:16:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (address,address,uint256,bytes memory)"
                                  }
                                },
                                "id": 9401,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "863:49:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9402,
                              "nodeType": "ExpressionStatement",
                              "src": "863:49:27"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9387,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9384,
                            "src": "822:1:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 9388,
                              "name": "_tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9378,
                              "src": "826:9:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 9389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "836:6:27",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "826:16:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "822:20:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9404,
                        "initializationExpression": {
                          "assignments": [
                            9384
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9384,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "815:1:27",
                              "nodeType": "VariableDeclaration",
                              "scope": 9404,
                              "src": "807:9:27",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9383,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "807:7:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9386,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 9385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "819:1:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "807:13:27"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 9392,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "844:3:27",
                            "subExpression": {
                              "id": 9391,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9384,
                              "src": "844:1:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9393,
                          "nodeType": "ExpressionStatement",
                          "src": "844:3:27"
                        },
                        "nodeType": "ForStatement",
                        "src": "802:121:27"
                      }
                    ]
                  },
                  "functionSelector": "5a4fee30",
                  "id": 9406,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "batchSafeTransferFrom",
                  "nameLocation": "687:21:27",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9381,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9373,
                        "mutability": "mutable",
                        "name": "_from",
                        "nameLocation": "717:5:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 9406,
                        "src": "709:13:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9372,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "709:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9375,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "732:3:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 9406,
                        "src": "724:11:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9374,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "724:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9378,
                        "mutability": "mutable",
                        "name": "_tokenIds",
                        "nameLocation": "754:9:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 9406,
                        "src": "737:26:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9376,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "737:7:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9377,
                          "nodeType": "ArrayTypeName",
                          "src": "737:9:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9380,
                        "mutability": "mutable",
                        "name": "data_",
                        "nameLocation": "778:5:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 9406,
                        "src": "765:18:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9379,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "765:5:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "708:76:27"
                  },
                  "returnParameters": {
                    "id": 9382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "792:0:27"
                  },
                  "scope": 9407,
                  "src": "678:251:27",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 9408,
              "src": "410:521:27",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256
              ],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            }
          ],
          "src": "309:623:27"
        },
        "id": 27
      },
      "contracts/extensions/ERC721Freezable.sol": {
        "ast": {
          "absolutePath": "contracts/extensions/ERC721Freezable.sol",
          "exportedSymbols": {
            "ERC721Enumerable": [
              1811
            ],
            "ERC721Freezable": [
              9543
            ]
          },
          "id": 9544,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9409,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".24"
              ],
              "nodeType": "PragmaDirective",
              "src": "309:24:28"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol",
              "id": 9411,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9544,
              "sourceUnit": 1812,
              "src": "335:104:28",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9410,
                    "name": "ERC721Enumerable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1811,
                    "src": "344:16:28",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9412,
                    "name": "ERC721Enumerable",
                    "nameLocations": [
                      "478:16:28"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1811,
                    "src": "478:16:28"
                  },
                  "id": 9413,
                  "nodeType": "InheritanceSpecifier",
                  "src": "478:16:28"
                }
              ],
              "canonicalName": "ERC721Freezable",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9543,
              "linearizedBaseContracts": [
                9543,
                1811,
                1907,
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721Freezable",
              "nameLocation": "459:15:28",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "eventSelector": "a109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207",
                  "id": 9419,
                  "name": "PermanentURI",
                  "nameLocation": "507:12:28",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 9418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9415,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_value",
                        "nameLocation": "527:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 9419,
                        "src": "520:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9414,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "520:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9417,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_id",
                        "nameLocation": "551:3:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 9419,
                        "src": "535:19:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9416,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "535:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "519:36:28"
                  },
                  "src": "501:55:28"
                },
                {
                  "constant": false,
                  "id": 9421,
                  "mutability": "mutable",
                  "name": "_isUriFrozen",
                  "nameLocation": "575:12:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 9543,
                  "src": "562:25:28",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9420,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "562:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 9431,
                    "nodeType": "Block",
                    "src": "622:80:28",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9426,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "640:9:28",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 9424,
                                  "name": "frozen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9458,
                                  "src": "641:6:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                    "typeString": "function () view returns (bool)"
                                  }
                                },
                                "id": 9425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "641:8:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "455243373231467265657a61626c653a205552492069732066726f7a656e",
                              "id": 9427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "651:32:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_270878189984c8dbe37476a799b2357fb6b3eef3a1bbb38d00c19e5cf2eeb210",
                                "typeString": "literal_string \"ERC721Freezable: URI is frozen\""
                              },
                              "value": "ERC721Freezable: URI is frozen"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_270878189984c8dbe37476a799b2357fb6b3eef3a1bbb38d00c19e5cf2eeb210",
                                "typeString": "literal_string \"ERC721Freezable: URI is frozen\""
                              }
                            ],
                            "id": 9423,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "632:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "632:52:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9429,
                        "nodeType": "ExpressionStatement",
                        "src": "632:52:28"
                      },
                      {
                        "id": 9430,
                        "nodeType": "PlaceholderStatement",
                        "src": "694:1:28"
                      }
                    ]
                  },
                  "id": 9432,
                  "name": "whenURINotFrozen",
                  "nameLocation": "603:16:28",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 9422,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "619:2:28"
                  },
                  "src": "594:108:28",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9441,
                    "nodeType": "Block",
                    "src": "733:83:28",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9435,
                                "name": "frozen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9458,
                                "src": "751:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                  "typeString": "function () view returns (bool)"
                                }
                              },
                              "id": 9436,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "751:8:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "455243373231467265657a61626c653a20555249206973206e6f742066726f7a656e",
                              "id": 9437,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "761:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_72a56545363d9c213f8f2f7cdc36a6046713c9235ea129f0f02d6d2e65fd2e92",
                                "typeString": "literal_string \"ERC721Freezable: URI is not frozen\""
                              },
                              "value": "ERC721Freezable: URI is not frozen"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_72a56545363d9c213f8f2f7cdc36a6046713c9235ea129f0f02d6d2e65fd2e92",
                                "typeString": "literal_string \"ERC721Freezable: URI is not frozen\""
                              }
                            ],
                            "id": 9434,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "743:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "743:55:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9439,
                        "nodeType": "ExpressionStatement",
                        "src": "743:55:28"
                      },
                      {
                        "id": 9440,
                        "nodeType": "PlaceholderStatement",
                        "src": "808:1:28"
                      }
                    ]
                  },
                  "id": 9442,
                  "name": "whenURIFrozen",
                  "nameLocation": "717:13:28",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 9433,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "730:2:28"
                  },
                  "src": "708:108:28",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9449,
                    "nodeType": "Block",
                    "src": "836:37:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 9447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9445,
                            "name": "_isUriFrozen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9421,
                            "src": "846:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 9446,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "861:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "846:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9448,
                        "nodeType": "ExpressionStatement",
                        "src": "846:20:28"
                      }
                    ]
                  },
                  "id": 9450,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9443,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "833:2:28"
                  },
                  "returnParameters": {
                    "id": 9444,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "836:0:28"
                  },
                  "scope": 9543,
                  "src": "822:51:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9457,
                    "nodeType": "Block",
                    "src": "924:36:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 9455,
                          "name": "_isUriFrozen",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9421,
                          "src": "941:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9454,
                        "id": 9456,
                        "nodeType": "Return",
                        "src": "934:19:28"
                      }
                    ]
                  },
                  "functionSelector": "054f7d9c",
                  "id": 9458,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "frozen",
                  "nameLocation": "888:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9451,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "894:2:28"
                  },
                  "returnParameters": {
                    "id": 9454,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9453,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9458,
                        "src": "918:4:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9452,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "918:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "917:6:28"
                  },
                  "scope": 9543,
                  "src": "879:81:28",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9467,
                    "nodeType": "Block",
                    "src": "1019:36:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 9465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9463,
                            "name": "_isUriFrozen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9421,
                            "src": "1029:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 9464,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1044:4:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "1029:19:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9466,
                        "nodeType": "ExpressionStatement",
                        "src": "1029:19:28"
                      }
                    ]
                  },
                  "id": 9468,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9461,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9460,
                        "name": "whenURINotFrozen",
                        "nameLocations": [
                          "1002:16:28"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9432,
                        "src": "1002:16:28"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1002:16:28"
                    }
                  ],
                  "name": "_freeze",
                  "nameLocation": "975:7:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9459,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "982:2:28"
                  },
                  "returnParameters": {
                    "id": 9462,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1019:0:28"
                  },
                  "scope": 9543,
                  "src": "966:89:28",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9482,
                    "nodeType": "Block",
                    "src": "1120:62:28",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9477,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9470,
                                  "src": "1157:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 9476,
                                "name": "tokenURI",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 500,
                                "src": "1148:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) view returns (string memory)"
                                }
                              },
                              "id": 9478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1148:17:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 9479,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9470,
                              "src": "1167:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9475,
                            "name": "PermanentURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9419,
                            "src": "1135:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (string memory,uint256)"
                            }
                          },
                          "id": 9480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1135:40:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9481,
                        "nodeType": "EmitStatement",
                        "src": "1130:45:28"
                      }
                    ]
                  },
                  "functionSelector": "b6854f96",
                  "id": 9483,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9473,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9472,
                        "name": "whenURIFrozen",
                        "nameLocations": [
                          "1106:13:28"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9442,
                        "src": "1106:13:28"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1106:13:28"
                    }
                  ],
                  "name": "freezeToken",
                  "nameLocation": "1070:11:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9471,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9470,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1090:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 9483,
                        "src": "1082:15:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9469,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1082:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1081:17:28"
                  },
                  "returnParameters": {
                    "id": 9474,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1120:0:28"
                  },
                  "scope": 9543,
                  "src": "1061:121:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9512,
                    "nodeType": "Block",
                    "src": "1236:192:28",
                    "statements": [
                      {
                        "assignments": [
                          9489
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9489,
                            "mutability": "mutable",
                            "name": "totalSupply",
                            "nameLocation": "1254:11:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 9512,
                            "src": "1246:19:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9488,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1246:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9492,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9490,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1528,
                            "src": "1268:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1268:13:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1246:35:28"
                      },
                      {
                        "body": {
                          "id": 9510,
                          "nodeType": "Block",
                          "src": "1352:70:28",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 9505,
                                        "name": "tokenId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9494,
                                        "src": "1393:7:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 9504,
                                      "name": "tokenURI",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 500,
                                      "src": "1384:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                        "typeString": "function (uint256) view returns (string memory)"
                                      }
                                    },
                                    "id": 9506,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1384:17:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "id": 9507,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9494,
                                    "src": "1403:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9503,
                                  "name": "PermanentURI",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9419,
                                  "src": "1371:12:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                    "typeString": "function (string memory,uint256)"
                                  }
                                },
                                "id": 9508,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1371:40:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9509,
                              "nodeType": "EmitStatement",
                              "src": "1366:45:28"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9497,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9494,
                            "src": "1317:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 9498,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9489,
                            "src": "1328:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1317:22:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9511,
                        "initializationExpression": {
                          "assignments": [
                            9494
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9494,
                              "mutability": "mutable",
                              "name": "tokenId",
                              "nameLocation": "1304:7:28",
                              "nodeType": "VariableDeclaration",
                              "scope": 9511,
                              "src": "1296:15:28",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9493,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1296:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9496,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 9495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1314:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "1296:19:28"
                        },
                        "isSimpleCounterLoop": false,
                        "loopExpression": {
                          "expression": {
                            "id": 9501,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "1341:9:28",
                            "subExpression": {
                              "id": 9500,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9494,
                              "src": "1341:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9502,
                          "nodeType": "ExpressionStatement",
                          "src": "1341:9:28"
                        },
                        "nodeType": "ForStatement",
                        "src": "1291:131:28"
                      }
                    ]
                  },
                  "functionSelector": "d2bc37f8",
                  "id": 9513,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9486,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9485,
                        "name": "whenURIFrozen",
                        "nameLocations": [
                          "1222:13:28"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9442,
                        "src": "1222:13:28"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1222:13:28"
                    }
                  ],
                  "name": "freezeAllTokens",
                  "nameLocation": "1197:15:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9484,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1212:2:28"
                  },
                  "returnParameters": {
                    "id": 9487,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1236:0:28"
                  },
                  "scope": 9543,
                  "src": "1188:240:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1624
                  ],
                  "body": {
                    "id": 9541,
                    "nodeType": "Block",
                    "src": "1622:124:28",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9526,
                            "name": "frozen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9458,
                            "src": "1636:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 9527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1636:8:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9533,
                        "nodeType": "IfStatement",
                        "src": "1632:59:28",
                        "trueBody": {
                          "id": 9532,
                          "nodeType": "Block",
                          "src": "1646:45:28",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9529,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9517,
                                    "src": "1672:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9528,
                                  "name": "freezeToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9483,
                                  "src": "1660:11:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 9530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1660:20:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9531,
                              "nodeType": "ExpressionStatement",
                              "src": "1660:20:28"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9536,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9515,
                              "src": "1721:2:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9537,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9517,
                              "src": "1725:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9538,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9519,
                              "src": "1734:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 9534,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1707:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721Freezable_$9543_$",
                                "typeString": "type(contract super ERC721Freezable)"
                              }
                            },
                            "id": 9535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1713:7:28",
                            "memberName": "_update",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1624,
                            "src": "1707:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 9539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1707:32:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 9525,
                        "id": 9540,
                        "nodeType": "Return",
                        "src": "1700:39:28"
                      }
                    ]
                  },
                  "id": 9542,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "1443:7:28",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9522,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 9521,
                        "name": "ERC721Enumerable",
                        "nameLocations": [
                          "1574:16:28"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1811,
                        "src": "1574:16:28"
                      }
                    ],
                    "src": "1565:26:28"
                  },
                  "parameters": {
                    "id": 9520,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9515,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1468:2:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 9542,
                        "src": "1460:10:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9514,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1460:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9517,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1488:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 9542,
                        "src": "1480:15:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9516,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1480:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9519,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "1513:4:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 9542,
                        "src": "1505:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9518,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1505:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1450:73:28"
                  },
                  "returnParameters": {
                    "id": 9525,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9524,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9542,
                        "src": "1609:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9523,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1609:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1608:9:28"
                  },
                  "scope": 9543,
                  "src": "1434:312:28",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 9544,
              "src": "441:1307:28",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256,
                1462,
                1465
              ],
              "usedEvents": [
                1277,
                1286,
                1295,
                9419
              ]
            }
          ],
          "src": "309:1440:28"
        },
        "id": 28
      },
      "contracts/extensions/ERC721MintPausable.sol": {
        "ast": {
          "absolutePath": "contracts/extensions/ERC721MintPausable.sol",
          "exportedSymbols": {
            "ERC721": [
              1261
            ],
            "ERC721MintPausable": [
              9657
            ]
          },
          "id": 9658,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9545,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".24"
              ],
              "nodeType": "PragmaDirective",
              "src": "309:24:29"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "id": 9547,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9658,
              "sourceUnit": 1262,
              "src": "335:73:29",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9546,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "344:6:29",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9548,
                    "name": "ERC721",
                    "nameLocations": [
                      "450:6:29"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1261,
                    "src": "450:6:29"
                  },
                  "id": 9549,
                  "nodeType": "InheritanceSpecifier",
                  "src": "450:6:29"
                }
              ],
              "canonicalName": "ERC721MintPausable",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9657,
              "linearizedBaseContracts": [
                9657,
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721MintPausable",
              "nameLocation": "428:18:29",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 9551,
                  "mutability": "mutable",
                  "name": "_mintingPaused",
                  "nameLocation": "476:14:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 9657,
                  "src": "463:27:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9550,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "463:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "eventSelector": "ee9b45d4bbbf616909699035be16f077b7459c8d4db74944d4e27d84f15faf34",
                  "id": 9555,
                  "name": "MintPaused",
                  "nameLocation": "503:10:29",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 9554,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9553,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "522:7:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9555,
                        "src": "514:15:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9552,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "514:7:29",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "513:17:29"
                  },
                  "src": "497:34:29"
                },
                {
                  "anonymous": false,
                  "eventSelector": "4edc83796ddd13f7381b8c91ffbca02176782693577083e23486400548aaa8a1",
                  "id": 9559,
                  "name": "MintUnpaused",
                  "nameLocation": "542:12:29",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 9558,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9557,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "563:7:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9559,
                        "src": "555:15:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9556,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "555:7:29",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "554:17:29"
                  },
                  "src": "536:36:29"
                },
                {
                  "body": {
                    "id": 9569,
                    "nodeType": "Block",
                    "src": "607:85:29",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "625:13:29",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 9562,
                                  "name": "mintPaused",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9596,
                                  "src": "626:10:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                    "typeString": "function () view returns (bool)"
                                  }
                                },
                                "id": 9563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "626:12:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732314d696e745061757361626c653a204d696e7420706175736564",
                              "id": 9565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "640:33:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a2d9e94a738a2a605373b019c432a953d828494dfb96bb26430e2b5fcf5229f2",
                                "typeString": "literal_string \"ERC721MintPausable: Mint paused\""
                              },
                              "value": "ERC721MintPausable: Mint paused"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a2d9e94a738a2a605373b019c432a953d828494dfb96bb26430e2b5fcf5229f2",
                                "typeString": "literal_string \"ERC721MintPausable: Mint paused\""
                              }
                            ],
                            "id": 9561,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "617:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9566,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "617:57:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9567,
                        "nodeType": "ExpressionStatement",
                        "src": "617:57:29"
                      },
                      {
                        "id": 9568,
                        "nodeType": "PlaceholderStatement",
                        "src": "684:1:29"
                      }
                    ]
                  },
                  "id": 9570,
                  "name": "whenMintNotPaused",
                  "nameLocation": "587:17:29",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 9560,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "604:2:29"
                  },
                  "src": "578:114:29",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9579,
                    "nodeType": "Block",
                    "src": "724:88:29",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9573,
                                "name": "mintPaused",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9596,
                                "src": "742:10:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                  "typeString": "function () view returns (bool)"
                                }
                              },
                              "id": 9574,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "742:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732314d696e745061757361626c653a204d696e74206e6f7420706175736564",
                              "id": 9575,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "756:37:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_bf96e44e3265a21899d1ccc0ca2da27b4082d025c6a7cd69a3e5505f76ce33d8",
                                "typeString": "literal_string \"ERC721MintPausable: Mint not paused\""
                              },
                              "value": "ERC721MintPausable: Mint not paused"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_bf96e44e3265a21899d1ccc0ca2da27b4082d025c6a7cd69a3e5505f76ce33d8",
                                "typeString": "literal_string \"ERC721MintPausable: Mint not paused\""
                              }
                            ],
                            "id": 9572,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "734:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "734:60:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9577,
                        "nodeType": "ExpressionStatement",
                        "src": "734:60:29"
                      },
                      {
                        "id": 9578,
                        "nodeType": "PlaceholderStatement",
                        "src": "804:1:29"
                      }
                    ]
                  },
                  "id": 9580,
                  "name": "whenMintPaused",
                  "nameLocation": "707:14:29",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 9571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "721:2:29"
                  },
                  "src": "698:114:29",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9587,
                    "nodeType": "Block",
                    "src": "832:39:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9583,
                            "name": "_mintingPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9551,
                            "src": "842:14:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 9584,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "859:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "842:22:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9586,
                        "nodeType": "ExpressionStatement",
                        "src": "842:22:29"
                      }
                    ]
                  },
                  "id": 9588,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9581,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "829:2:29"
                  },
                  "returnParameters": {
                    "id": 9582,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "832:0:29"
                  },
                  "scope": 9657,
                  "src": "818:53:29",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9595,
                    "nodeType": "Block",
                    "src": "926:38:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9593,
                          "name": "_mintingPaused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9551,
                          "src": "943:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9592,
                        "id": 9594,
                        "nodeType": "Return",
                        "src": "936:21:29"
                      }
                    ]
                  },
                  "functionSelector": "7e4831d3",
                  "id": 9596,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mintPaused",
                  "nameLocation": "886:10:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9589,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "896:2:29"
                  },
                  "returnParameters": {
                    "id": 9592,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9591,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9596,
                        "src": "920:4:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9590,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "920:4:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "919:6:29"
                  },
                  "scope": 9657,
                  "src": "877:87:29",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9605,
                    "nodeType": "Block",
                    "src": "1027:38:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9601,
                            "name": "_mintingPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9551,
                            "src": "1037:14:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 9602,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1054:4:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "1037:21:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9604,
                        "nodeType": "ExpressionStatement",
                        "src": "1037:21:29"
                      }
                    ]
                  },
                  "id": 9606,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9599,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9598,
                        "name": "whenMintNotPaused",
                        "nameLocations": [
                          "1009:17:29"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9570,
                        "src": "1009:17:29"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1009:17:29"
                    }
                  ],
                  "name": "_pauseMint",
                  "nameLocation": "979:10:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9597,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "989:2:29"
                  },
                  "returnParameters": {
                    "id": 9600,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1027:0:29"
                  },
                  "scope": 9657,
                  "src": "970:95:29",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9615,
                    "nodeType": "Block",
                    "src": "1127:39:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9611,
                            "name": "_mintingPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9551,
                            "src": "1137:14:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 9612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1154:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "1137:22:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9614,
                        "nodeType": "ExpressionStatement",
                        "src": "1137:22:29"
                      }
                    ]
                  },
                  "id": 9616,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9609,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9608,
                        "name": "whenMintPaused",
                        "nameLocations": [
                          "1112:14:29"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9580,
                        "src": "1112:14:29"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1112:14:29"
                    }
                  ],
                  "name": "_unpauseMint",
                  "nameLocation": "1080:12:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9607,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1092:2:29"
                  },
                  "returnParameters": {
                    "id": 9610,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1127:0:29"
                  },
                  "scope": 9657,
                  "src": "1071:95:29",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    874
                  ],
                  "body": {
                    "id": 9655,
                    "nodeType": "Block",
                    "src": "1284:184:29",
                    "statements": [
                      {
                        "assignments": [
                          9630
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9630,
                            "mutability": "mutable",
                            "name": "from",
                            "nameLocation": "1302:4:29",
                            "nodeType": "VariableDeclaration",
                            "scope": 9655,
                            "src": "1294:12:29",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 9629,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1294:7:29",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9637,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 9633,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9618,
                              "src": "1323:2:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9634,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9620,
                              "src": "1327:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9635,
                              "name": "auth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9622,
                              "src": "1336:4:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 9631,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1309:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721MintPausable_$9657_$",
                                "typeString": "type(contract super ERC721MintPausable)"
                              }
                            },
                            "id": 9632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1315:7:29",
                            "memberName": "_update",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 874,
                            "src": "1309:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,uint256,address) returns (address)"
                            }
                          },
                          "id": 9636,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1309:32:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1294:47:29"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 9648,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 9641,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "!",
                                    "prefix": true,
                                    "src": "1360:13:29",
                                    "subExpression": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 9639,
                                        "name": "mintPaused",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9596,
                                        "src": "1361:10:29",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                          "typeString": "function () view returns (bool)"
                                        }
                                      },
                                      "id": 9640,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1361:12:29",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 9647,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 9642,
                                      "name": "from",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9630,
                                      "src": "1377:4:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 9645,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1393:1:29",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          }
                                        ],
                                        "id": 9644,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "1385:7:29",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 9643,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1385:7:29",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 9646,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1385:10:29",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "1377:18:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "1360:35:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 9649,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1359:37:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732314d696e745061757361626c653a204d696e74696e672069732064697361626c6564",
                              "id": 9650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1398:41:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9b46cb794917c87608e419bbda1291ed2ca50fa1301ab40671cade28b2f249a4",
                                "typeString": "literal_string \"ERC721MintPausable: Minting is disabled\""
                              },
                              "value": "ERC721MintPausable: Minting is disabled"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9b46cb794917c87608e419bbda1291ed2ca50fa1301ab40671cade28b2f249a4",
                                "typeString": "literal_string \"ERC721MintPausable: Minting is disabled\""
                              }
                            ],
                            "id": 9638,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1351:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1351:89:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9652,
                        "nodeType": "ExpressionStatement",
                        "src": "1351:89:29"
                      },
                      {
                        "expression": {
                          "id": 9653,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9630,
                          "src": "1457:4:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 9628,
                        "id": 9654,
                        "nodeType": "Return",
                        "src": "1450:11:29"
                      }
                    ]
                  },
                  "id": 9656,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "1181:7:29",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9625,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 9624,
                        "name": "ERC721",
                        "nameLocations": [
                          "1258:6:29"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1261,
                        "src": "1258:6:29"
                      }
                    ],
                    "src": "1249:16:29"
                  },
                  "parameters": {
                    "id": 9623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9618,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1197:2:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9656,
                        "src": "1189:10:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9617,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1189:7:29",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9620,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1209:7:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9656,
                        "src": "1201:15:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9619,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1201:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9622,
                        "mutability": "mutable",
                        "name": "auth",
                        "nameLocation": "1226:4:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9656,
                        "src": "1218:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9621,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1218:7:29",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1188:43:29"
                  },
                  "returnParameters": {
                    "id": 9628,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9627,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9656,
                        "src": "1275:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1275:7:29",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1274:9:29"
                  },
                  "scope": 9657,
                  "src": "1172:296:29",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 9658,
              "src": "410:1060:29",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256
              ],
              "usedEvents": [
                1277,
                1286,
                1295,
                9555,
                9559
              ]
            }
          ],
          "src": "309:1162:29"
        },
        "id": 29
      },
      "contracts/extensions/ERC721OpenSeaGassLess.sol": {
        "ast": {
          "absolutePath": "contracts/extensions/ERC721OpenSeaGassLess.sol",
          "exportedSymbols": {
            "ERC721": [
              1261
            ],
            "ERC721OpenSeaGassLess": [
              9731
            ],
            "OpenSeaProxyRegistry": [
              9738
            ],
            "OwnableDelegateProxy": [
              9732
            ]
          },
          "id": 9739,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9659,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".24"
              ],
              "nodeType": "PragmaDirective",
              "src": "309:24:30"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "file": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
              "id": 9661,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9739,
              "sourceUnit": 1262,
              "src": "335:73:30",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9660,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1261,
                    "src": "344:6:30",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9662,
                    "name": "ERC721",
                    "nameLocations": [
                      "453:6:30"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1261,
                    "src": "453:6:30"
                  },
                  "id": 9663,
                  "nodeType": "InheritanceSpecifier",
                  "src": "453:6:30"
                }
              ],
              "canonicalName": "ERC721OpenSeaGassLess",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9731,
              "linearizedBaseContracts": [
                9731,
                1261,
                257,
                1935,
                1378,
                5077,
                5089,
                2309
              ],
              "name": "ERC721OpenSeaGassLess",
              "nameLocation": "428:21:30",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "89cd503a",
                  "id": 9665,
                  "mutability": "mutable",
                  "name": "_proxyRegistryAddress",
                  "nameLocation": "481:21:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 9731,
                  "src": "466:36:30",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9664,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "466:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9674,
                    "nodeType": "Block",
                    "src": "552:62:30",
                    "statements": [
                      {
                        "expression": {
                          "id": 9672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9670,
                            "name": "_proxyRegistryAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9665,
                            "src": "562:21:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9671,
                            "name": "proxyRegistryAddress_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9667,
                            "src": "586:21:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "562:45:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 9673,
                        "nodeType": "ExpressionStatement",
                        "src": "562:45:30"
                      }
                    ]
                  },
                  "id": 9675,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9668,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9667,
                        "mutability": "mutable",
                        "name": "proxyRegistryAddress_",
                        "nameLocation": "529:21:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9675,
                        "src": "521:29:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9666,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "521:7:30",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "520:31:30"
                  },
                  "returnParameters": {
                    "id": 9669,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "552:0:30"
                  },
                  "scope": 9731,
                  "src": "509:105:30",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9684,
                    "nodeType": "Block",
                    "src": "702:62:30",
                    "statements": [
                      {
                        "expression": {
                          "id": 9682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9680,
                            "name": "_proxyRegistryAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9665,
                            "src": "712:21:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9681,
                            "name": "proxyRegistryAddress_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9677,
                            "src": "736:21:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "712:45:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 9683,
                        "nodeType": "ExpressionStatement",
                        "src": "712:45:30"
                      }
                    ]
                  },
                  "id": 9685,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setProxyRegistryAddress",
                  "nameLocation": "629:24:30",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9678,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9677,
                        "mutability": "mutable",
                        "name": "proxyRegistryAddress_",
                        "nameLocation": "662:21:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9685,
                        "src": "654:29:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9676,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "654:7:30",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "653:31:30"
                  },
                  "returnParameters": {
                    "id": 9679,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "702:0:30"
                  },
                  "scope": 9731,
                  "src": "620:144:30",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    575
                  ],
                  "body": {
                    "id": 9729,
                    "nodeType": "Block",
                    "src": "874:332:30",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9695,
                            "name": "_proxyRegistryAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9665,
                            "src": "888:21:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 9698,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "921:1:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 9697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "913:7:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9696,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "913:7:30",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "913:10:30",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "888:35:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9722,
                        "nodeType": "IfStatement",
                        "src": "884:259:30",
                        "trueBody": {
                          "id": 9721,
                          "nodeType": "Block",
                          "src": "925:218:30",
                          "statements": [
                            {
                              "assignments": [
                                9703
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 9703,
                                  "mutability": "mutable",
                                  "name": "proxyRegistry",
                                  "nameLocation": "960:13:30",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9721,
                                  "src": "939:34:30",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_OpenSeaProxyRegistry_$9738",
                                    "typeString": "contract OpenSeaProxyRegistry"
                                  },
                                  "typeName": {
                                    "id": 9702,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                      "id": 9701,
                                      "name": "OpenSeaProxyRegistry",
                                      "nameLocations": [
                                        "939:20:30"
                                      ],
                                      "nodeType": "IdentifierPath",
                                      "referencedDeclaration": 9738,
                                      "src": "939:20:30"
                                    },
                                    "referencedDeclaration": 9738,
                                    "src": "939:20:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_OpenSeaProxyRegistry_$9738",
                                      "typeString": "contract OpenSeaProxyRegistry"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 9707,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 9705,
                                    "name": "_proxyRegistryAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9665,
                                    "src": "997:21:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 9704,
                                  "name": "OpenSeaProxyRegistry",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9738,
                                  "src": "976:20:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OpenSeaProxyRegistry_$9738_$",
                                    "typeString": "type(contract OpenSeaProxyRegistry)"
                                  }
                                },
                                "id": 9706,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "976:43:30",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_OpenSeaProxyRegistry_$9738",
                                  "typeString": "contract OpenSeaProxyRegistry"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "939:80:30"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 9716,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 9712,
                                          "name": "_owner",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9687,
                                          "src": "1067:6:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "id": 9710,
                                          "name": "proxyRegistry",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9703,
                                          "src": "1045:13:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_OpenSeaProxyRegistry_$9738",
                                            "typeString": "contract OpenSeaProxyRegistry"
                                          }
                                        },
                                        "id": 9711,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "1059:7:30",
                                        "memberName": "proxies",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 9737,
                                        "src": "1045:21:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_contract$_OwnableDelegateProxy_$9732_$",
                                          "typeString": "function (address) view external returns (contract OwnableDelegateProxy)"
                                        }
                                      },
                                      "id": 9713,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1045:29:30",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_OwnableDelegateProxy_$9732",
                                        "typeString": "contract OwnableDelegateProxy"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_OwnableDelegateProxy_$9732",
                                        "typeString": "contract OwnableDelegateProxy"
                                      }
                                    ],
                                    "id": 9709,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1037:7:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 9708,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1037:7:30",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 9714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1037:38:30",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 9715,
                                  "name": "operator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9689,
                                  "src": "1079:8:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1037:50:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 9720,
                              "nodeType": "IfStatement",
                              "src": "1033:100:30",
                              "trueBody": {
                                "id": 9719,
                                "nodeType": "Block",
                                "src": "1089:44:30",
                                "statements": [
                                  {
                                    "expression": {
                                      "hexValue": "74727565",
                                      "id": 9717,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1114:4:30",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    "functionReturnParameters": 9694,
                                    "id": 9718,
                                    "nodeType": "Return",
                                    "src": "1107:11:30"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9725,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9687,
                              "src": "1182:6:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9726,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9689,
                              "src": "1190:8:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 9723,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1159:5:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721OpenSeaGassLess_$9731_$",
                                "typeString": "type(contract super ERC721OpenSeaGassLess)"
                              }
                            },
                            "id": 9724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1165:16:30",
                            "memberName": "isApprovedForAll",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 575,
                            "src": "1159:22:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 9727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1159:40:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9694,
                        "id": 9728,
                        "nodeType": "Return",
                        "src": "1152:47:30"
                      }
                    ]
                  },
                  "functionSelector": "e985e9c5",
                  "id": 9730,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "779:16:30",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9691,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "850:8:30"
                  },
                  "parameters": {
                    "id": 9690,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9687,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nameLocation": "804:6:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9730,
                        "src": "796:14:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9686,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "796:7:30",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9689,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "820:8:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9730,
                        "src": "812:16:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9688,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "812:7:30",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "795:34:30"
                  },
                  "returnParameters": {
                    "id": 9694,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9693,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9730,
                        "src": "868:4:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9692,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "868:4:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "867:6:30"
                  },
                  "scope": 9731,
                  "src": "770:436:30",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 9739,
              "src": "410:798:30",
              "usedErrors": [
                215,
                220,
                229,
                234,
                239,
                246,
                251,
                256
              ],
              "usedEvents": [
                1277,
                1286,
                1295
              ]
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "OwnableDelegateProxy",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9732,
              "linearizedBaseContracts": [
                9732
              ],
              "name": "OwnableDelegateProxy",
              "nameLocation": "1219:20:30",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 9739,
              "src": "1210:33:30",
              "usedErrors": [],
              "usedEvents": []
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "OpenSeaProxyRegistry",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9738,
              "linearizedBaseContracts": [
                9738
              ],
              "name": "OpenSeaProxyRegistry",
              "nameLocation": "1254:20:30",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "c4552791",
                  "id": 9737,
                  "mutability": "mutable",
                  "name": "proxies",
                  "nameLocation": "1329:7:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 9738,
                  "src": "1281:55:30",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_contract$_OwnableDelegateProxy_$9732_$",
                    "typeString": "mapping(address => contract OwnableDelegateProxy)"
                  },
                  "typeName": {
                    "id": 9736,
                    "keyName": "",
                    "keyNameLocation": "-1:-1:-1",
                    "keyType": {
                      "id": 9733,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1289:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1281:40:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_contract$_OwnableDelegateProxy_$9732_$",
                      "typeString": "mapping(address => contract OwnableDelegateProxy)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 9735,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 9734,
                        "name": "OwnableDelegateProxy",
                        "nameLocations": [
                          "1300:20:30"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9732,
                        "src": "1300:20:30"
                      },
                      "referencedDeclaration": 9732,
                      "src": "1300:20:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_OwnableDelegateProxy_$9732",
                        "typeString": "contract OwnableDelegateProxy"
                      }
                    }
                  },
                  "visibility": "public"
                }
              ],
              "scope": 9739,
              "src": "1245:94:30",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "309:1031:30"
        },
        "id": 30
      },
      "contracts/extensions/ERC721Whitelist.sol": {
        "ast": {
          "absolutePath": "contracts/extensions/ERC721Whitelist.sol",
          "exportedSymbols": {
            "Context": [
              2309
            ],
            "ERC721Whitelist": [
              9865
            ],
            "MerkleProof": [
              5053
            ],
            "Strings": [
              3940
            ]
          },
          "id": 9866,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9740,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".24"
              ],
              "nodeType": "PragmaDirective",
              "src": "309:24:31"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "@openzeppelin/contracts/utils/Context.sol",
              "id": 9742,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9866,
              "sourceUnit": 2310,
              "src": "335:68:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9741,
                    "name": "Context",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2309,
                    "src": "344:7:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
              "file": "@openzeppelin/contracts/utils/Strings.sol",
              "id": 9744,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9866,
              "sourceUnit": 3941,
              "src": "404:68:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9743,
                    "name": "Strings",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3940,
                    "src": "413:7:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol",
              "file": "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol",
              "id": 9746,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9866,
              "sourceUnit": 5054,
              "src": "473:89:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9745,
                    "name": "MerkleProof",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5053,
                    "src": "482:11:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9747,
                    "name": "Context",
                    "nameLocations": [
                      "601:7:31"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2309,
                    "src": "601:7:31"
                  },
                  "id": 9748,
                  "nodeType": "InheritanceSpecifier",
                  "src": "601:7:31"
                }
              ],
              "canonicalName": "ERC721Whitelist",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9865,
              "linearizedBaseContracts": [
                9865,
                2309
              ],
              "name": "ERC721Whitelist",
              "nameLocation": "582:15:31",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "a0b30390",
                  "id": 9750,
                  "mutability": "mutable",
                  "name": "_whitelistMerkleRoot",
                  "nameLocation": "630:20:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 9865,
                  "src": "615:35:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9749,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "615:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9759,
                    "nodeType": "Block",
                    "src": "729:60:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 9757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9755,
                            "name": "_whitelistMerkleRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9750,
                            "src": "739:20:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9756,
                            "name": "whitelistMerkleRoot_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9752,
                            "src": "762:20:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "739:43:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 9758,
                        "nodeType": "ExpressionStatement",
                        "src": "739:43:31"
                      }
                    ]
                  },
                  "id": 9760,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setWhitelistMerkleRoot",
                  "nameLocation": "666:23:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9752,
                        "mutability": "mutable",
                        "name": "whitelistMerkleRoot_",
                        "nameLocation": "698:20:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9760,
                        "src": "690:28:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 9751,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "690:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "689:30:31"
                  },
                  "returnParameters": {
                    "id": 9754,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "729:0:31"
                  },
                  "scope": 9865,
                  "src": "657:132:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9777,
                    "nodeType": "Block",
                    "src": "884:65:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9772,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9762,
                                  "src": "922:7:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 9773,
                                  "name": "allowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9764,
                                  "src": "931:9:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 9770,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "911:3:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 9771,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "915:6:31",
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "911:10:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 9774,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "911:30:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 9769,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "901:9:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 9775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "901:41:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 9768,
                        "id": 9776,
                        "nodeType": "Return",
                        "src": "894:48:31"
                      }
                    ]
                  },
                  "id": 9778,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_leaf",
                  "nameLocation": "804:5:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9762,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "818:7:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9778,
                        "src": "810:15:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9761,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "810:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9764,
                        "mutability": "mutable",
                        "name": "allowance",
                        "nameLocation": "841:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9778,
                        "src": "827:23:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9763,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "827:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "809:42:31"
                  },
                  "returnParameters": {
                    "id": 9768,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9767,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9778,
                        "src": "875:7:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 9766,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "875:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "874:9:31"
                  },
                  "scope": 9865,
                  "src": "795:154:31",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9806,
                    "nodeType": "Block",
                    "src": "1068:150:31",
                    "statements": [
                      {
                        "assignments": [
                          9789
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9789,
                            "mutability": "mutable",
                            "name": "leaf",
                            "nameLocation": "1086:4:31",
                            "nodeType": "VariableDeclaration",
                            "scope": 9806,
                            "src": "1078:12:31",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 9788,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1078:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9798,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9791,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "1099:10:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 9792,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1099:12:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 9795,
                                  "name": "allowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9780,
                                  "src": "1130:9:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 9793,
                                  "name": "Strings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3940,
                                  "src": "1113:7:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Strings_$3940_$",
                                    "typeString": "type(library Strings)"
                                  }
                                },
                                "id": 9794,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "1121:8:31",
                                "memberName": "toString",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2652,
                                "src": "1113:16:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                }
                              },
                              "id": 9796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1113:27:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 9790,
                            "name": "_leaf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9778,
                            "src": "1093:5:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (address,string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 9797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1093:48:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1078:63:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9801,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9783,
                              "src": "1177:5:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            },
                            {
                              "id": 9802,
                              "name": "_whitelistMerkleRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9750,
                              "src": "1184:20:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 9803,
                              "name": "leaf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9789,
                              "src": "1206:4:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 9799,
                              "name": "MerkleProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5053,
                              "src": "1158:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_MerkleProof_$5053_$",
                                "typeString": "type(library MerkleProof)"
                              }
                            },
                            "id": 9800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1170:6:31",
                            "memberName": "verify",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4009,
                            "src": "1158:18:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)"
                            }
                          },
                          "id": 9804,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1158:53:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9787,
                        "id": 9805,
                        "nodeType": "Return",
                        "src": "1151:60:31"
                      }
                    ]
                  },
                  "id": 9807,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_validateWhitelistMerkleProof",
                  "nameLocation": "964:29:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9784,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9780,
                        "mutability": "mutable",
                        "name": "allowance",
                        "nameLocation": "1002:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9807,
                        "src": "994:17:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9779,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "994:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9783,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "1032:5:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9807,
                        "src": "1013:24:31",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9781,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1013:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 9782,
                          "nodeType": "ArrayTypeName",
                          "src": "1013:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "993:45:31"
                  },
                  "returnParameters": {
                    "id": 9787,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9786,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9807,
                        "src": "1062:4:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9785,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1062:4:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1061:6:31"
                  },
                  "scope": 9865,
                  "src": "955:263:31",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9831,
                    "nodeType": "Block",
                    "src": "1308:154:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 9820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9818,
                                "name": "_whitelistMerkleRoot",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9750,
                                "src": "1326:20:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 9819,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1350:1:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1326:25:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "57686974656c697374206d65726b6c6520726f6f74206e6f7420736574",
                              "id": 9821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1353:31:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f4330adf31d7af2929e8b29035834aac0bfba4881f178fd78d15043c188a7c87",
                                "typeString": "literal_string \"Whitelist merkle root not set\""
                              },
                              "value": "Whitelist merkle root not set"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f4330adf31d7af2929e8b29035834aac0bfba4881f178fd78d15043c188a7c87",
                                "typeString": "literal_string \"Whitelist merkle root not set\""
                              }
                            ],
                            "id": 9817,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1318:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1318:67:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9823,
                        "nodeType": "ExpressionStatement",
                        "src": "1318:67:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9826,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9812,
                              "src": "1421:5:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            {
                              "id": 9827,
                              "name": "_whitelistMerkleRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9750,
                              "src": "1428:20:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 9828,
                              "name": "leaf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9809,
                              "src": "1450:4:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 9824,
                              "name": "MerkleProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5053,
                              "src": "1402:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_MerkleProof_$5053_$",
                                "typeString": "type(library MerkleProof)"
                              }
                            },
                            "id": 9825,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1414:6:31",
                            "memberName": "verify",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4009,
                            "src": "1402:18:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)"
                            }
                          },
                          "id": 9829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1402:53:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9816,
                        "id": 9830,
                        "nodeType": "Return",
                        "src": "1395:60:31"
                      }
                    ]
                  },
                  "id": 9832,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_verify",
                  "nameLocation": "1233:7:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9813,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9809,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nameLocation": "1249:4:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9832,
                        "src": "1241:12:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 9808,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1241:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9812,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "1272:5:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9832,
                        "src": "1255:22:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9810,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1255:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 9811,
                          "nodeType": "ArrayTypeName",
                          "src": "1255:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1240:38:31"
                  },
                  "returnParameters": {
                    "id": 9816,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9815,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9832,
                        "src": "1302:4:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9814,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1302:4:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1301:6:31"
                  },
                  "scope": 9865,
                  "src": "1224:238:31",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9856,
                    "nodeType": "Block",
                    "src": "1577:135:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 9845,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "1609:3:31",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 9846,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "1613:6:31",
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "1609:10:31",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 9847,
                                      "name": "allowance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9834,
                                      "src": "1621:9:31",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    ],
                                    "id": 9844,
                                    "name": "_leaf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9778,
                                    "src": "1603:5:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_string_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (address,string memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 9848,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1603:28:31",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 9849,
                                  "name": "proof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9837,
                                  "src": "1633:5:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                    "typeString": "bytes32[] calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                    "typeString": "bytes32[] calldata"
                                  }
                                ],
                                "id": 9843,
                                "name": "_verify",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9832,
                                "src": "1595:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,bytes32[] memory) view returns (bool)"
                                }
                              },
                              "id": 9850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1595:44:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6965642e",
                              "id": 9851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1641:37:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0524976f21b88c58a7cb84090a6212517cef5d4e4044bdcbb074de94a6a39c3d",
                                "typeString": "literal_string \"Invalid Merkle Tree proof supplied.\""
                              },
                              "value": "Invalid Merkle Tree proof supplied."
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0524976f21b88c58a7cb84090a6212517cef5d4e4044bdcbb074de94a6a39c3d",
                                "typeString": "literal_string \"Invalid Merkle Tree proof supplied.\""
                              }
                            ],
                            "id": 9842,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1587:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9852,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1587:92:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9853,
                        "nodeType": "ExpressionStatement",
                        "src": "1587:92:31"
                      },
                      {
                        "expression": {
                          "id": 9854,
                          "name": "allowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9834,
                          "src": "1696:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 9841,
                        "id": 9855,
                        "nodeType": "Return",
                        "src": "1689:16:31"
                      }
                    ]
                  },
                  "functionSelector": "66fddfa9",
                  "id": 9857,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAllowance",
                  "nameLocation": "1477:12:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9838,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9834,
                        "mutability": "mutable",
                        "name": "allowance",
                        "nameLocation": "1504:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9857,
                        "src": "1490:23:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9833,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1490:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9837,
                        "mutability": "mutable",
                        "name": "proof",
                        "nameLocation": "1534:5:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9857,
                        "src": "1515:24:31",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9835,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1515:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 9836,
                          "nodeType": "ArrayTypeName",
                          "src": "1515:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1489:51:31"
                  },
                  "returnParameters": {
                    "id": 9841,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9840,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9857,
                        "src": "1562:13:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9839,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1562:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1561:15:31"
                  },
                  "scope": 9865,
                  "src": "1468:244:31",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9863,
                    "nodeType": "Block",
                    "src": "1766:44:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 9861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "1776:27:31",
                          "subExpression": {
                            "id": 9860,
                            "name": "_whitelistMerkleRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9750,
                            "src": "1783:20:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9862,
                        "nodeType": "ExpressionStatement",
                        "src": "1776:27:31"
                      }
                    ]
                  },
                  "id": 9864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_disableWhitelistMerkleRoot",
                  "nameLocation": "1727:27:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9858,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1754:2:31"
                  },
                  "returnParameters": {
                    "id": 9859,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1766:0:31"
                  },
                  "scope": 9865,
                  "src": "1718:92:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 9866,
              "src": "564:1248:31",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "309:1504:31"
        },
        "id": 31
      }
    },
    "contracts": {
      "@openzeppelin/contracts/access/Ownable.sol": {
        "Ownable": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "OwnableInvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "OwnableUnauthorizedAccount",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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. The initial owner is set to the address provided by the deployer. 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.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/interfaces/IERC2981.sol": {
        "IERC2981": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "salePrice",
                  "type": "uint256"
                }
              ],
              "name": "royaltyInfo",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "royaltyAmount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "royaltyInfo(uint256,uint256)": "2a55205a",
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the NFT Royalty Standard. A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal support for royalty payments across all NFT marketplaces and ecosystem participants.\",\"kind\":\"dev\",\"methods\":{\"royaltyInfo(uint256,uint256)\":{\"details\":\"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC2981.sol\":\"IERC2981\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC2981.sol\":{\"keccak256\":\"0x3b017a19c1730050d0fdff8dfa9255741634699aa4217442724746ca49e13292\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05530a2959e8be01cd88993970924cd6081c3462395f6fc0e73c034519259b05\",\"dweb:/ipfs/QmXAG8dF9fiYE8iVWJYWxmbEMNL6RvBAxzRGq2nyLanB2M\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
        "IERC1155Errors": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "idsLength",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "valuesLength",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InvalidArrayLength",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC1155MissingApprovalForAll",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}"
        },
        "IERC20Errors": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "allowance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                }
              ],
              "name": "ERC20InsufficientAllowance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                }
              ],
              "name": "ERC20InsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC20InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC20InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC20InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "ERC20InvalidSpender",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}"
        },
        "IERC721Errors": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/ERC721.sol": {
        "ERC721": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"details\":\"Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as {ERC721Enumerable}.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"constructor\":{\"details\":\"Initializes the contract by setting a `name` and a `symbol` to the token collection.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":\"ERC721\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "IERC721": {
          "abi": [
            {
              "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "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": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\"}],\"devdoc\":{\"details\":\"Required interface of an ERC-721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 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 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.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"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.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"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 address zero. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. 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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "IERC721Receiver": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "onERC721Received",
              "outputs": [
                {
                  "internalType": "bytes4",
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "onERC721Received(address,address,uint256,bytes)": "150b7a02"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for any contract that wants to support safeTransfers from ERC-721 asset contracts.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"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 `IERC721Receiver.onERC721Received.selector`.\"}},\"title\":\"ERC-721 token receiver interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":\"IERC721Receiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol": {
        "ERC721Burnable": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(uint256)": "42966c68",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"details\":\"ERC-721 Token that can be burned (destroyed).\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"title\":\"ERC-721 Burnable Token\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol\":\"ERC721Burnable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol\":{\"keccak256\":\"0xdee1ff07172e443c6600581fc4f11e7830a6d33e4e551752935b835d52a09404\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c503b5573ecd8d18157903b6760e02e8f86b47238c997d6dd04b99df74ef532d\",\"dweb:/ipfs/QmSGcRgfe18dtR4t3erYBSq3W6tPGXHPZ3JKkD1yFJsNsm\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol": {
        "ERC721Enumerable": {
          "abi": [
            {
              "inputs": [],
              "name": "ERC721EnumerableForbiddenBatchMint",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "ERC721OutOfBoundsIndex",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "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": "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenByIndex(uint256)": "4f6ccce7",
              "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ERC721EnumerableForbiddenBatchMint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"ERC721OutOfBoundsIndex\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\"}],\"devdoc\":{\"details\":\"This implements an optional extension of {ERC721} defined in the ERC that adds enumerability of all the token ids in the contract as well as all token ids owned by each account. CAUTION: {ERC721} extensions that implement custom `balanceOf` logic, such as {ERC721Consecutive}, interfere with enumerability and should not be used together with {ERC721Enumerable}.\",\"errors\":{\"ERC721EnumerableForbiddenBatchMint()\":[{\"details\":\"Batch mint is not allowed.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721OutOfBoundsIndex(address,uint256)\":[{\"details\":\"An `owner`'s token query was out of bounds for `index`. NOTE: The owner being `address(0)` indicates a global out of bounds index.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":\"ERC721Enumerable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00\",\"dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol": {
        "ERC721Pausable": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "EnforcedPause",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ExpectedPause",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "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"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "paused()": "5c975abb",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"details\":\"ERC-721 token with pausable token transfers, minting and burning. Useful for scenarios such as preventing trades until the end of an evaluation period, or having an emergency switch for freezing all token transfers in the event of a large bug. IMPORTANT: This contract does not include public pause and unpause functions. In addition to inheriting this contract, you must define both functions, invoking the {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate access control, e.g. using {AccessControl} or {Ownable}. Not doing so will make the contract pause mechanism of the contract unreachable, and thus unusable.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol\":\"ERC721Pausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol\":{\"keccak256\":\"0xc99d280642a1590b7a9a65220b4a606576ad1f51f2773b997eff3d340501c44b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0aebdcae05832b3253bedd5575458fa4b9abca6a203966d72690e62efe98890\",\"dweb:/ipfs/QmbeFZ6X7VksJmRqncuas8cjsYGXPN8FBYtV9PGmpmup8f\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol": {
        "ERC721Royalty": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "denominator",
                  "type": "uint256"
                }
              ],
              "name": "ERC2981InvalidDefaultRoyalty",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC2981InvalidDefaultRoyaltyReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "denominator",
                  "type": "uint256"
                }
              ],
              "name": "ERC2981InvalidTokenRoyalty",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC2981InvalidTokenRoyaltyReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "salePrice",
                  "type": "uint256"
                }
              ],
              "name": "royaltyInfo",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "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": "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "royaltyInfo(uint256,uint256)": "2a55205a",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidDefaultRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidDefaultRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidTokenRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidTokenRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\":\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"details\":\"Extension of ERC-721 with the ERC-2981 NFT Royalty Standard, a standardized way to retrieve royalty payment information. Royalty information can be specified globally for all token ids via {ERC2981-_setDefaultRoyalty}, and/or individually for specific token ids via {ERC2981-_setTokenRoyalty}. The latter takes precedence over the first. IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.\",\"errors\":{\"ERC2981InvalidDefaultRoyalty(uint256,uint256)\":[{\"details\":\"The default royalty set is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidDefaultRoyaltyReceiver(address)\":[{\"details\":\"The default royalty receiver is invalid.\"}],\"ERC2981InvalidTokenRoyalty(uint256,uint256,uint256)\":[{\"details\":\"The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidTokenRoyaltyReceiver(uint256,address)\":[{\"details\":\"The royalty receiver for `tokenId` is invalid.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"royaltyInfo(uint256,uint256)\":{\"details\":\"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol\":\"ERC721Royalty\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC2981.sol\":{\"keccak256\":\"0x3b017a19c1730050d0fdff8dfa9255741634699aa4217442724746ca49e13292\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05530a2959e8be01cd88993970924cd6081c3462395f6fc0e73c034519259b05\",\"dweb:/ipfs/QmXAG8dF9fiYE8iVWJYWxmbEMNL6RvBAxzRGq2nyLanB2M\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol\":{\"keccak256\":\"0x6931eb56297ef01d684f2b24b36f67949a8754ee753789d71b425be2dec8cf8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b67cd3c0f0dc7c3d8326321dbf9a80b92a85d0efe37d234d137d87e61af1fd0\",\"dweb:/ipfs/Qmbh2jmGvFJECA4RkTiQDjAMsRcw7vJEgQBFRrA3BXC5ij\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/token/common/ERC2981.sol\":{\"keccak256\":\"0xbc10927da9f47d87e6cd46a3218526b7718716a717d07722791eb7de6befc2a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d838bc5e79732a20acc5578a4fa0dd88ba484c906346ad4daea2654ecb922a94\",\"dweb:/ipfs/QmaXqkJiniK3xSi5MEaCrYnFDa9AXd6FvByHMMKaWEEEK7\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol": {
        "IERC721Enumerable": {
          "abi": [
            {
              "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "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": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "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": [],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "tokenByIndex(uint256)": "4f6ccce7",
              "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":[],\"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\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 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 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.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"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.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"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 address zero. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"tokenByIndex(uint256)\":{\"details\":\"Returns a token ID at a given `index` of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"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.\"},\"totalSupply()\":{\"details\":\"Returns the total amount of tokens stored by the contract.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. 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.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional enumeration extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":\"IERC721Enumerable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "IERC721Metadata": {
          "abi": [
            {
              "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 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 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.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"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.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"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 address zero. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. 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.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional metadata extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":\"IERC721Metadata\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol": {
        "ERC721Utils": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212205b9200cd490c4c35699db80c8dd25968abf5efc816d788dd612022bbb98c8d1e64736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST SWAP3 STOP 0xCD BLOBHASH 0xC 0x4C CALLDATALOAD PUSH10 0x9DB80C8DD25968ABF5EF 0xC8 AND 0xD7 DUP9 0xDD PUSH2 0x2022 0xBB 0xB9 DUP13 DUP14 0x1E PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "431:1488:12:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212205b9200cd490c4c35699db80c8dd25968abf5efc816d788dd612022bbb98c8d1e64736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST SWAP3 STOP 0xCD BLOBHASH 0xC 0x4C CALLDATALOAD PUSH10 0x9DB80C8DD25968ABF5EF 0xC8 AND 0xD7 DUP9 0xDD PUSH2 0x2022 0xBB 0xB9 DUP13 DUP14 0x1E PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "431:1488:12:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library that provide common ERC-721 utility functions. See https://eips.ethereum.org/EIPS/eip-721[ERC-721]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":\"ERC721Utils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/common/ERC2981.sol": {
        "ERC2981": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "denominator",
                  "type": "uint256"
                }
              ],
              "name": "ERC2981InvalidDefaultRoyalty",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC2981InvalidDefaultRoyaltyReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "denominator",
                  "type": "uint256"
                }
              ],
              "name": "ERC2981InvalidTokenRoyalty",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC2981InvalidTokenRoyaltyReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "salePrice",
                  "type": "uint256"
                }
              ],
              "name": "royaltyInfo",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "royaltyInfo(uint256,uint256)": "2a55205a",
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidDefaultRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidDefaultRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidTokenRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidTokenRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the fee is specified in basis points by default. IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.\",\"errors\":{\"ERC2981InvalidDefaultRoyalty(uint256,uint256)\":[{\"details\":\"The default royalty set is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidDefaultRoyaltyReceiver(address)\":[{\"details\":\"The default royalty receiver is invalid.\"}],\"ERC2981InvalidTokenRoyalty(uint256,uint256,uint256)\":[{\"details\":\"The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidTokenRoyaltyReceiver(uint256,address)\":[{\"details\":\"The royalty receiver for `tokenId` is invalid.\"}]},\"kind\":\"dev\",\"methods\":{\"royaltyInfo(uint256,uint256)\":{\"details\":\"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/common/ERC2981.sol\":\"ERC2981\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC2981.sol\":{\"keccak256\":\"0x3b017a19c1730050d0fdff8dfa9255741634699aa4217442724746ca49e13292\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05530a2959e8be01cd88993970924cd6081c3462395f6fc0e73c034519259b05\",\"dweb:/ipfs/QmXAG8dF9fiYE8iVWJYWxmbEMNL6RvBAxzRGq2nyLanB2M\"]},\"@openzeppelin/contracts/token/common/ERC2981.sol\":{\"keccak256\":\"0xbc10927da9f47d87e6cd46a3218526b7718716a717d07722791eb7de6befc2a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d838bc5e79732a20acc5578a4fa0dd88ba484c906346ad4daea2654ecb922a94\",\"dweb:/ipfs/QmaXqkJiniK3xSi5MEaCrYnFDa9AXd6FvByHMMKaWEEEK7\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "Context": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Panic.sol": {
        "Panic": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220b961d8a9d7208fda718afe44257b6bc95f68d576f4faad9c1a3a30cefb3b6faf64736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB9 PUSH2 0xD8A9 0xD7 KECCAK256 DUP16 0xDA PUSH18 0x8AFE44257B6BC95F68D576F4FAAD9C1A3A30 0xCE 0xFB EXTCODESIZE PUSH16 0xAF64736F6C6343000818003300000000 ",
              "sourceMap": "657:1315:15:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220b961d8a9d7208fda718afe44257b6bc95f68d576f4faad9c1a3a30cefb3b6faf64736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB9 PUSH2 0xD8A9 0xD7 KECCAK256 DUP16 0xDA PUSH18 0x8AFE44257B6BC95F68D576F4FAAD9C1A3A30 0xCE 0xFB EXTCODESIZE PUSH16 0xAF64736F6C6343000818003300000000 ",
              "sourceMap": "657:1315:15:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example {      using Panic for uint256;      // Use any of the declared internal constants      function foo() { Panic.GENERIC.panic(); }      // Alternatively      function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Pausable.sol": {
        "Pausable": {
          "abi": [
            {
              "inputs": [],
              "name": "EnforcedPause",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ExpectedPause",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "paused()": "5c975abb"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Pausable.sol\":\"Pausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
        "ReentrancyGuard": {
          "abi": [
            {
              "inputs": [],
              "name": "ReentrancyGuardReentrantCall",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "Strings": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "length",
                  "type": "uint256"
                }
              ],
              "name": "StringsInsufficientHexLength",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "StringsInvalidAddressFormat",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "StringsInvalidChar",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220b1635b78c0a1e2fac450ed60d07fd7f6d1916fb5541347ef5c31b0a2de7cd18c64736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 PUSH4 0x5B78C0A1 0xE2 STATICCALL 0xC4 POP 0xED PUSH1 0xD0 PUSH32 0xD7F6D1916FB5541347EF5C31B0A2DE7CD18C64736F6C63430008180033000000 ",
              "sourceMap": "297:18980:18:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220b1635b78c0a1e2fac450ed60d07fd7f6d1916fb5541347ef5c31b0a2de7cd18c64736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 PUSH4 0x5B78C0A1 0xE2 STATICCALL 0xC4 POP 0xED PUSH1 0xD0 PUSH32 0xD7F6D1916FB5541347EF5C31B0A2DE7CD18C64736F6C63430008180033000000 ",
              "sourceMap": "297:18980:18:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidAddressFormat\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidChar\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}],\"StringsInvalidAddressFormat()\":[{\"details\":\"The string being parsed is not a properly formatted address.\"}],\"StringsInvalidChar()\":[{\"details\":\"The string being parsed contains characters that are not in scope of the given base.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/cryptography/Hashes.sol": {
        "Hashes": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220d4d3faee051b550c27f9f860fc2a541bf8029d114ab83a6719630e5bd6989cfe64736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD4 0xD3 STATICCALL 0xEE SDIV SHL SSTORE 0xC 0x27 0xF9 0xF8 PUSH1 0xFC 0x2A SLOAD SHL 0xF8 MUL SWAP14 GT BLOBBASEFEE 0xB8 GASPRICE PUSH8 0x19630E5BD6989CFE PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "221:811:19:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220d4d3faee051b550c27f9f860fc2a541bf8029d114ab83a6719630e5bd6989cfe64736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD4 0xD3 STATICCALL 0xEE SDIV SHL SSTORE 0xC 0x27 0xF9 0xF8 PUSH1 0xFC 0x2A SLOAD SHL 0xF8 MUL SWAP14 GT BLOBBASEFEE 0xB8 GASPRICE PUSH8 0x19630E5BD6989CFE PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "221:811:19:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library of standard hash functions. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/Hashes.sol\":\"Hashes\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11\",\"dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol": {
        "MerkleProof": {
          "abi": [
            {
              "inputs": [],
              "name": "MerkleProofInvalidMultiproof",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220c6eca191e507638c2942422890b7fc8877a9a42ddf122e5b43cd498ed12d540f64736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 0xEC LOG1 SWAP2 0xE5 SMOD PUSH4 0x8C294242 0x28 SWAP1 0xB7 0xFC DUP9 PUSH24 0xA9A42DDF122E5B43CD498ED12D540F64736F6C6343000818 STOP CALLER ",
              "sourceMap": "1353:22982:20:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220c6eca191e507638c2942422890b7fc8877a9a42ddf122e5b43cd498ed12d540f64736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 0xEC LOG1 SWAP2 0xE5 SMOD PUSH4 0x8C294242 0x28 SWAP1 0xB7 0xFC DUP9 PUSH24 0xA9A42DDF122E5B43CD498ED12D540F64736F6C6343000818 STOP CALLER ",
              "sourceMap": "1353:22982:20:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MerkleProofInvalidMultiproof\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"These functions deal with verification of Merkle Tree proofs. The tree and the proofs can be generated using our https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. You will find a quickstart guide in the readme. WARNING: You should avoid using leaf values that are 64 bytes long prior to hashing, or use a hash function other than keccak256 for hashing leaves. This is because the concatenation of a sorted pair of internal nodes in the Merkle tree could be reinterpreted as a leaf value. OpenZeppelin's JavaScript library generates Merkle trees that are safe against this attack out of the box. IMPORTANT: Consider memory side-effects when using custom hashing functions that access memory in an unsafe way. NOTE: This library supports proof verification for merkle trees built using custom _commutative_ hashing functions (i.e. `H(a, b) == H(b, a)`). Proving leaf inclusion in trees built using non-commutative hashing functions requires additional logic that is not supported by this library.\",\"errors\":{\"MerkleProofInvalidMultiproof()\":[{\"details\":\"The multiproof provided is not valid.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/MerkleProof.sol\":\"MerkleProof\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11\",\"dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe\"]},\"@openzeppelin/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0x36a0c409c437a753cac9b92b75f93b0fbe92803bf2c8ff1517e54b247f166134\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f91ba472de411aa557cdbf6560c40750d87bd11c9060bc04d2ba7119af9d5a6\",\"dweb:/ipfs/QmQjtYo2i7dDvzCEzZ67bDoNSG4RrwMoxPWuqFmX5Xzpuw\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "ERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC-165 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); } ```\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "IERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "Math": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220c85d3e1162e6850995fc4a89865e21acdc9d0cff2b2ef6b8cf1fd81135f6c74e64736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 TSTORE RETURNDATACOPY GT PUSH3 0xE68509 SWAP6 0xFC BLOBBASEFEE DUP10 DUP7 MCOPY 0x21 0xAC 0xDC SWAP14 0xC SELFDESTRUCT 0x2B 0x2E 0xF6 0xB8 0xCF 0x1F 0xD8 GT CALLDATALOAD 0xF6 0xC7 0x4E PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "281:31863:23:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220c85d3e1162e6850995fc4a89865e21acdc9d0cff2b2ef6b8cf1fd81135f6c74e64736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 TSTORE RETURNDATACOPY GT PUSH3 0xE68509 SWAP6 0xFC BLOBBASEFEE DUP10 DUP7 MCOPY 0x21 0xAC 0xDC SWAP14 0xC SELFDESTRUCT 0x2B 0x2E 0xF6 0xB8 0xCF 0x1F 0xD8 GT CALLDATALOAD 0xF6 0xC7 0x4E PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "281:31863:23:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/SafeCast.sol": {
        "SafeCast": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "bits",
                  "type": "uint8"
                },
                {
                  "internalType": "int256",
                  "name": "value",
                  "type": "int256"
                }
              ],
              "name": "SafeCastOverflowedIntDowncast",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "value",
                  "type": "int256"
                }
              ],
              "name": "SafeCastOverflowedIntToUint",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "bits",
                  "type": "uint8"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "SafeCastOverflowedUintDowncast",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "SafeCastOverflowedUintToInt",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220669304ee76bdedbd58b5aa0ad283265853a162095601e57a8146ac9d9326a76764736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x9304EE76BDEDBD PC 0xB5 0xAA EXP 0xD2 DUP4 0x26 PC MSTORE8 LOG1 PUSH3 0x95601 0xE5 PUSH27 0x8146AC9D9326A76764736F6C634300081800330000000000000000 ",
              "sourceMap": "769:34173:24:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220669304ee76bdedbd58b5aa0ad283265853a162095601e57a8146ac9d9326a76764736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x9304EE76BDEDBD PC 0xB5 0xAA EXP 0xD2 DUP4 0x26 PC MSTORE8 LOG1 PUSH3 0x95601 0xE5 PUSH27 0x8146AC9D9326A76764736F6C634300081800330000000000000000 ",
              "sourceMap": "769:34173:24:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "SignedMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212204833030d81d539ec57d4fe435e7d369e078d1dfd58b3d161f0bff0c21862435164736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BASEFEE CALLER SUB 0xD DUP2 0xD5 CODECOPY 0xEC JUMPI 0xD4 INVALID NUMBER MCOPY PUSH30 0x369E078D1DFD58B3D161F0BFF0C21862435164736F6C6343000818003300 ",
              "sourceMap": "258:2354:25:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212204833030d81d539ec57d4fe435e7d369e078d1dfd58b3d161f0bff0c21862435164736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BASEFEE CALLER SUB 0xD DUP2 0xD5 CODECOPY 0xEC JUMPI 0xD4 INVALID NUMBER MCOPY PUSH30 0x369E078D1DFD58B3D161F0BFF0C21862435164736F6C6343000818003300 ",
              "sourceMap": "258:2354:25:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "contracts/MetaDog.sol": {
        "MetaDog": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "baseTokenURI_",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "proxyRegistryAddress_",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "wallet_",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "denominator",
                  "type": "uint256"
                }
              ],
              "name": "ERC2981InvalidDefaultRoyalty",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC2981InvalidDefaultRoyaltyReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "numerator",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "denominator",
                  "type": "uint256"
                }
              ],
              "name": "ERC2981InvalidTokenRoyalty",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC2981InvalidTokenRoyaltyReceiver",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ERC721EnumerableForbiddenBatchMint",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "ERC721OutOfBoundsIndex",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "EnforcedPause",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ExpectedPause",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "OwnableInvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "OwnableUnauthorizedAccount",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ReentrancyGuardReentrantCall",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "ZeroAddressNotAllowed",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "MintPaused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "MintUnpaused",
              "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": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "_value",
                  "type": "string"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "_id",
                  "type": "uint256"
                }
              ],
              "name": "PermanentURI",
              "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"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "MAX_PER_TX",
              "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": [],
              "name": "PRICE_IN_WEI_PUBLIC",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "PRICE_IN_WEI_WHITELIST",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "RESERVES",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ROYALTIES_IN_BASIS_POINTS",
              "outputs": [
                {
                  "internalType": "uint96",
                  "name": "",
                  "type": "uint96"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "_proxyRegistryAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "_whitelistMerkleRoot",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "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": [
                {
                  "internalType": "address",
                  "name": "_from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "_tokenIds",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data_",
                  "type": "bytes"
                }
              ],
              "name": "batchSafeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "_tokenIds",
                  "type": "uint256[]"
                }
              ],
              "name": "batchTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collectReserves",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "disableWhitelistMerkleRoot",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "freeze",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "freezeAllTokens",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "freezeToken",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "frozen",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "allowance",
                  "type": "string"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "proof",
                  "type": "bytes32[]"
                }
              ],
              "name": "getAllowance",
              "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": "recipients_",
                  "type": "address[]"
                }
              ],
              "name": "gift",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint128",
                  "name": "value",
                  "type": "uint128"
                }
              ],
              "name": "increaseBalance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "mintPaused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pauseMint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "count",
                  "type": "uint256"
                }
              ],
              "name": "publicMint",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "salePrice",
                  "type": "uint256"
                }
              ],
              "name": "royaltyInfo",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "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": "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": "baseTokenURI_",
                  "type": "string"
                }
              ],
              "name": "setBaseURI",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "proxyRegistryAddress_",
                  "type": "address"
                }
              ],
              "name": "setProxyRegistryAddress",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "whitelistMerkleRoot_",
                  "type": "bytes32"
                }
              ],
              "name": "setWhitelistMerkleRoot",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "startPublicSale",
              "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": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpauseMint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "auth",
                  "type": "address"
                }
              ],
              "name": "update",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "wallet",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "count",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allowance",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "proof",
                  "type": "bytes32[]"
                }
              ],
              "name": "whitelistMint",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "abi_decode_string_fromMemory": {
                  "entryPoint": 1439,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_memory": {
                  "entryPoint": 1401,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                }
              },
              "generatedSources": [],
              "linkReferences": {},
              "object": "604060a0815234620005745762003cde803803806200001e8162000579565b928339810160a082820312620005745781516001600160401b039190828111620005745781620000509185016200059f565b90602091828501518481116200057457826200006e9187016200059f565b9186860151908582116200057457620000899187016200059f565b60608601516001600160a01b03969093908785168503620005745760800151938785169788860362000574578451918883116200029a57600254926001968785811c9516801562000569575b8a8610146200038d578190601f9586811162000512575b508a90868311600114620004a6576000926200049a575b5050600019600383901b1c191690871b176002555b83518981116200029a576003948554908882811c921680156200048f575b8b8310146200038d57818684931162000439575b508a90868311600114620003d257600092620003c6575b505060001982871b1c191690871b1784555b600e80546001600160b01b03191660109290921b62010000600160b01b03169190911790553315620003ae57600f8054336001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a38360105560ff19601454166014558251928784116200029a576012548581811c91168015620003a3575b888210146200038d5782811162000341575b5086918411600114620002d457938394918492600095620002c8575b50501b92600019911b1c1916176012555b8315620002b0576080528351808501928311818410176200029a579184528282526101f4910152607d60a21b17600055516136cc908162000612823960805181818161110d015281816116fa0152611e300152f35b634e487b7160e01b600052604160045260246000fd5b84516302a042e760e11b815260048101859052602490fd5b01519350388062000234565b9190601f19841692601260005284886000209460005b8a898383106200032957505050106200030e575b50505050811b0160125562000245565b01519060f884600019921b161c1916905538808080620002fe565b868601518955909701969485019488935001620002ea565b6012600052876000208380870160051c8201928a881062000383575b0160051c019086905b8281106200037657505062000218565b6000815501869062000366565b925081926200035d565b634e487b7160e01b600052602260045260246000fd5b90607f169062000206565b8951631e4fbdf760e01b815260006004820152602490fd5b01519050388062000161565b60008881528c81208b9550929190601f198516908e5b82821062000421575050841162000408575b505050811b01845562000173565b015160001983891b60f8161c19169055388080620003fa565b8385015186558d979095019493840193018e620003e8565b909150866000528a6000208680850160051c8201928d861062000485575b918b91869594930160051c01915b828110620004755750506200014a565b600081558594508b910162000465565b9250819262000457565b91607f169162000136565b01519050388062000103565b90899350601f1983169160026000528c600020928d6000905b828210620004fa5750508411620004e0575b505050811b0160025562000118565b015160001960f88460031b161c19169055388080620004d1565b8385015186558d979095019493840193018e620004bf565b90915060026000528a6000208680850160051c8201928d86106200055f575b918b91869594930160051c01915b8281106200054f575050620000ec565b600081558594508b91016200053f565b9250819262000531565b94607f1694620000d5565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200029a57604052565b919080601f84011215620005745782516001600160401b0381116200029a57602090620005d5601f8201601f1916830162000579565b92818452828287010111620005745760005b818110620005fd57508260009394955001015290565b8581018301518482018401528201620005e756fe608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714611edd57508163029877b614611e08578163054f7d9c14611de457816306fdde0314611d31578163081812fc14611ce95781630922f9c5146102a6578163095ea7b314611bd45781630c1c972a14611ba7578163163e1e6114611abb57816318160ddd14611a9c5781631a8bd2da146119df57816323b872dd146119c75781632a55205a146119045781632db11544146118095781632f745c591461175457816332cb6b0c146117385781633ccfd60b146116bc5781633f4ba83a1461163957816342842e0e1461161057816342966c68146111ef5781634f6ccce714611181578163501a516214611131578163521eb273146110e057816355f804b314610f445781635a4fee3014610ebb5781635c975abb14610e9757816362a5af3b14610e615781636352211e14610e2457816366fddfa914610ce557816370a0823114610cb8578163715018a614610c385781637ad7614d14610c165781637e4831d314610bef5781638456cb5914610b9457816389cd503a14610b5c5781638da5cb5b14610b2757816395d89b4114610a3d578163a0b3039014610a1e578163a22cb4651461095a578163b44029791461093a578163b6854f96146108e3578163b88d4fde14610890578163bd32fb661461086e578163c4be5b5914610693578163c87b56dd1461065b578163cd85cdb5146105c1578163d0babf38146105a4578163d26ea6c014610539578163d283e3cc146104a7578163d2bc37f814610423578163e985e9c5146103ec578163f2fde38b14610321578163f3993d11146102ab57508063f43a22dc146102a65763fbd9b92d1461028257600080fd5b346102a257816003193601126102a25760209051669536c7089100008152f35b5080fd5b612182565b833461031e57606060031936011261031e576102c56121a3565b916102ce6121c6565b9060443567ffffffffffffffff811161031a576102ed9136910161232c565b825b8151811015610316578061031061030860019385612667565b518588612443565b016102ef565b8380f35b8380fd5b80fd5b9050346103e85760206003193601126103e85761033c6121a3565b90610345612b0d565b73ffffffffffffffffffffffffffffffffffffffff8092169283156103b9575050600f54827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b8280fd5b5050346102a257806003193601126102a25760209061041a61040c6121a3565b6104146121c6565b90612f84565b90519015158152f35b5050346102a257816003193601126102a25761044360ff600e5416612727565b600a549060015b82811115610456578380f35b80807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761049a6104886104a29561296c565b8651918291602080845283019061215d565b0390a261238c565b61044a565b919050346103e857806003193601126103e8576104c26121a3565b602435926fffffffffffffffffffffffffffffffff8416809403610535578361050e575073ffffffffffffffffffffffffffffffffffffffff1683526005602052822090815401905580f35b82517f59171fc1000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b833461031e57602060031936011261031e576105536121a3565b61055b612b0d565b7fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff0000600e549260101b16911617600e5580f35b5050346102a257816003193601126102a257602090516101f48152f35b9050346103e857826003193601126103e8576105db612b0d565b600e549160ff8360081c1661061857836101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff851617600e5580f35b906020606492519162461bcd60e51b8352820152601f60248201527f4552433732314d696e745061757361626c653a204d696e7420706175736564006044820152fd5b82843461031e57602060031936011261031e575061067c61068f923561296c565b905191829160208352602083019061215d565b0390f35b905060606003193601126103e8578035916044359160243567ffffffffffffffff841161086a576106ca61072094369084016121e9565b94906106d4612efa565b6011956106fa606f6106f38a6011546106ee8115156123eb565b612436565b1115612539565b61071b61070f61070986613521565b33612f35565b92600d5492369161267b565b613494565b1561080157338652601360205261073a8584882054612436565b116107bf576618838370f34000908185029185830414851517156107ac5750610764903414612584565b33845260136020528320610779838254612436565b9055825b82811061078d5783600160105580f35b6001906107a661079d845461238c565b80855533612b5e565b0161077d565b856011602492634e487b7160e01b835252fd5b6020606492519162461bcd60e51b8352820152601b60248201527f457863656564732077686974656c69737420616c6c6f77616e636500000000006044820152fd5b506020608492519162461bcd60e51b8352820152602260248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b8580fd5b8390346102a25760206003193601126102a257610889612b0d565b35600d5580f35b8390346102a25760806003193601126102a2576108ab6121a3565b6108b36121c6565b9060643567ffffffffffffffff8111610535576108e0936108d6913691016122cd565b9160443591612798565b80f35b9050346103e85760206003193601126103e8576109347fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720791359261092b60ff600e5416612727565b61067c8461296c565b0390a280f35b833461031e578060031936011261031e57610953612b0d565b80600d5580f35b919050346103e857806003193601126103e8576109756121a3565b90602435918215158093036105355773ffffffffffffffffffffffffffffffffffffffff169283156109f05750338452600760205280842083855260205280842060ff1981541660ff8416179055519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b8360249251917f5b08ba18000000000000000000000000000000000000000000000000000000008352820152fd5b5050346102a257816003193601126102a257602090600d549051908152f35b82843461031e578060031936011261031e578151918282600354610a60816123b1565b9081845260209560019187600182169182600014610b00575050600114610aa4575b50505061068f9291610a9591038561228e565b5192828493845283019061215d565b9190869350600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610ae85750505082010181610a9561068f610a82565b8054848a018601528895508794909301928101610acf565b60ff19168782015293151560051b86019093019350849250610a95915061068f9050610a82565b5050346102a257816003193601126102a25760209073ffffffffffffffffffffffffffffffffffffffff600f54169051908152f35b5050346102a257816003193601126102a25760209073ffffffffffffffffffffffffffffffffffffffff600e5460101c169051908152f35b5050346102a257816003193601126102a25760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610bd2612b0d565b610bda6134eb565b600160ff19600c541617600c5551338152a180f35b5050346102a257816003193601126102a25760209060ff600e5460081c1690519015158152f35b5050346102a257816003193601126102a257602090516618838370f340008152f35b833461031e578060031936011261031e57610c51612b0d565b8073ffffffffffffffffffffffffffffffffffffffff600f547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346102a25760206003193601126102a257602090610cde610cd96121a3565b6126c9565b9051908152f35b839150346102a257826003193601126102a25767ffffffffffffffff813581811161031a57610d1790369084016122cd565b9260243591821161031e5750610d33610d4791369084016121e9565b9190610d3f8533612f35565b92369161267b565b600d54908115610de15790610d5c9291613494565b15610d78575061068f915191829160208352602083019061215d565b608490602084519162461bcd60e51b8352820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152fd5b606484602088519162461bcd60e51b8352820152601d60248201527f57686974656c697374206d65726b6c6520726f6f74206e6f74207365740000006044820152fd5b82843461031e57602060031936011261031e575073ffffffffffffffffffffffffffffffffffffffff610e5960209335612e99565b915191168152f35b833461031e578060031936011261031e57610e7a612b0d565b600160ff19600e54610e8f60ff82161561261c565b1617600e5580f35b5050346102a257816003193601126102a25760209060ff600c541690519015158152f35b833461031e57608060031936011261031e57610ed56121a3565b610edd6121c6565b67ffffffffffffffff9360443585811161053557610efe903690830161232c565b9460643590811161053557610f15913691016122cd565b93835b8151811015610f405780610f3a87610f3260019486612667565b518688612798565b01610f18565b8480f35b833461031e576020806003193601126102a25767ffffffffffffffff90833582811161031a57610f7790369086016122cd565b93610f80612b0d565b610f8f60ff600e54161561261c565b84519283116110cd5750610fa46012546123b1565b601f811161106a575b50602090601f8311600114610fe957508293829392610fde575b50506000198260011b9260031b1c19161760125580f35b015190508380610fc7565b90601f19831694601285527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449285905b878210611052575050836001959610611039575b505050811b0160125580f35b015160001960f88460031b161c1916905583808061102d565b80600185968294968601518155019501930190611019565b601284527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444601f840160051c810191602085106110c3575b601f0160051c01905b8181106110b85750610fad565b8481556001016110ab565b90915081906110a2565b836041602492634e487b7160e01b835252fd5b5050346102a257816003193601126102a2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5050346102a25760606003193601126102a25761114c6121a3565b916044359273ffffffffffffffffffffffffffffffffffffffff91828516850361031e5750602093610e599160243590613079565b9050346103e85760206003193601126103e857803592600a548410156111bb576020836111ad866125cf565b91905490519160031b1c8152f35b604493919251927fa57d13dc0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b919050346103e8576020908160031936011261031a57823560ff600e5416806115bf575b5061121c6134eb565b80855283835273ffffffffffffffffffffffffffffffffffffffff908183872054169133151590816114f9575b505081159182158093816114a9575b8389528787528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558389847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a415611439575050600a54818752600b8552808488205568010000000000000000811015611426576113006112e9826001859401600a556125cf565b81939154906000199060031b92831b921b19161790565b90555b600a54906000199182810190811161141357818852600b865261132985892054916125cf565b90549060031b1c8061133d6112e9846125cf565b90558852600b86528488205586528583812055600a54801561140057810190611365826125cf565b909182549160031b1b19169055600a5560ff600e5460081c16159081156113f8575b5015611391578380f35b60849350519162461bcd60e51b8352820152602760248201527f4552433732314d696e745061757361626c653a204d696e74696e67206973206460448201527f697361626c6564000000000000000000000000000000000000000000000000006064820152fd5b905038611387565b602487603188634e487b7160e01b835252fd5b602488601189634e487b7160e01b835252fd5b602487604188634e487b7160e01b835252fd5b611444575b50611303565b61144d816126c9565b82885260098652848820549188526008865284882091818103611487575b508288526009865287858120558752845285838120553861143e565b81895282875285892054818a5280878b2055895260098752858920553861146b565b6114e284600052600660205260406000207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b828952600587528589206000198154019055611258565b8161157d575b501561150c573880611249565b939250611541579160249251917f7e273289000000000000000000000000000000000000000000000000000000008352820152fd5b517f177e802f00000000000000000000000000000000000000000000000000000000815233918101918252602082019290925281906040010390fd5b338414915081156115ad575b8115611597575b50386114ff565b8288526006865284882054163314905038611590565b90506115b93384612f84565b90611589565b6115c890612727565b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b556572076116076115f68361296c565b85519182918883528883019061215d565b0390a238611213565b5050346102a2576108e0906116243661221a565b919251926116318461225c565b858452612798565b9050346103e857826003193601126103e857611653612b0d565b600c549060ff82161561169557507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9160ff1960209216600c5551338152a180f35b82517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b5050346102a257816003193601126102a2576116d6612b0d565b818080804781811561172f575b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f115611725575080f35b51903d90823e3d90fd5b506108fc6116e3565b5050346102a257816003193601126102a25760209051606f8152f35b82843461031e578160031936011261031e5761176e6121a3565b926024359061177c856126c9565b8210156117b7575090829173ffffffffffffffffffffffffffffffffffffffff60209516825260088552828220908252845220549051908152f35b92517fa57d13dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941692840192835260208301525081906040010390fd5b91905060206003193601126103e857813591611823612efa565b61182f600d54156124ee565b61183d60ff601454166124ee565b601191611857606f6106f3866011546106ee8115156123eb565b60058410156118c15750669536c708910000908184029184830414841517156118ae5750611886903414612584565b825b8281106118985783600160105580f35b6001906118a861079d845461238c565b01611888565b846011602492634e487b7160e01b835252fd5b906020606492519162461bcd60e51b8352820152601b60248201527f45786365656473206d617820706572207472616e73616374696f6e00000000006044820152fd5b82843461031e578160031936011261031e5760243591833582526001602052808220549173ffffffffffffffffffffffffffffffffffffffff8084169360a01c9084156119a9575b506bffffffffffffffffffffffff169384810294818604149015171561199657815173ffffffffffffffffffffffffffffffffffffffff8416815261271085046020820152604090f35b80601186634e487b7160e01b6024945252fd5b8254908116945060a01c90506bffffffffffffffffffffffff61194c565b833461031e576108e06119d93661221a565b91612443565b9050346103e857826003193601126103e8576119f9612b0d565b600e549160ff8360081c1615611a3357837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8416600e5580f35b906020608492519162461bcd60e51b8352820152602360248201527f4552433732314d696e745061757361626c653a204d696e74206e6f742070617560448201527f73656400000000000000000000000000000000000000000000000000000000006064820152fd5b5050346102a257816003193601126102a257602090600a549051908152f35b9050346103e85760206003193601126103e857803567ffffffffffffffff811161031a57611aec90369083016121e9565b91611af5612b0d565b601193606f611b0c856011546106ee8115156123eb565b11611b64575050835b828110611b20578480f35b8060051b8201359073ffffffffffffffffffffffffffffffffffffffff8216820361086a57611b5e600192611b55875461238c565b90818855612b5e565b01611b15565b906020606492519162461bcd60e51b8352820152601260248201527f45786365646573206d617820737570706c7900000000000000000000000000006044820152fd5b833461031e578060031936011261031e57611bc0612b0d565b80600d55600160ff19601454161760145580f35b919050346103e857806003193601126103e857611bef6121a3565b9160243590611bfd82612e99565b9033151580611cc9575b80611cb8575b611c885750819073ffffffffffffffffffffffffffffffffffffffff809516948591167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258780a4835260066020528220907fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b6024908451907fa9fbf51f0000000000000000000000000000000000000000000000000000000082523390820152fd5b50611cc33383612f84565b15611c0d565b503373ffffffffffffffffffffffffffffffffffffffff83161415611c07565b9050346103e85760206003193601126103e8578160209373ffffffffffffffffffffffffffffffffffffffff9235611d2081612e99565b508152600685522054169051908152f35b82843461031e578060031936011261031e578151918282600254611d54816123b1565b9081845260209560019187600182169182600014610b00575050600114611d885750505061068f9291610a9591038561228e565b9190869350600283527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b828410611dcc5750505082010181610a9561068f610a82565b8054848a018601528895508794909301928101611db3565b5050346102a257816003193601126102a25760209060ff600e541690519015158152f35b9050346103e857826003193601126103e857611e22612b0d565b601191601154611e9a5750507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169060015b6005811115611e76578380f35b611e9590611e90611e87845461238c565b80855585612b5e565b61238c565b611e69565b906020606492519162461bcd60e51b8352820152601a60248201527f526573657276657320616c726561647920636f6c6c65637465640000000000006044820152fd5b8491346103e85760206003193601126103e857357fffffffff0000000000000000000000000000000000000000000000000000000081168091036103e857602092507f0e083076000000000000000000000000000000000000000000000000000000008114908115612110575b81156120e6575b81156120bc575b8115612092575b8115612068575b8115611f74575b5015158152f35b7f780e9d6300000000000000000000000000000000000000000000000000000000811491508115611fa7575b5083611f6d565b7f80ac58cd0000000000000000000000000000000000000000000000000000000081149150811561203e575b8115611fe1575b5083611fa0565b7f2a55205a00000000000000000000000000000000000000000000000000000000811491508115612014575b5083611fda565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361200d565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150611fd3565b7f7e4831d30000000000000000000000000000000000000000000000000000000081149150611f66565b7f617605f20000000000000000000000000000000000000000000000000000000081149150611f5f565b7fc64edc390000000000000000000000000000000000000000000000000000000081149150611f58565b7f79f154c40000000000000000000000000000000000000000000000000000000081149150611f51565b7f42966c680000000000000000000000000000000000000000000000000000000081149150611f4a565b60005b83811061214d5750506000910152565b818101518382015260200161213d565b90601f19601f60209361217b8151809281875287808801910161213a565b0116010190565b3461219e57600060031936011261219e57602060405160058152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361219e57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361219e57565b9181601f8401121561219e5782359167ffffffffffffffff831161219e576020808501948460051b01011161219e57565b600319606091011261219e5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361219e5791602435908116810361219e579060443590565b6020810190811067ffffffffffffffff82111761227857604052565b634e487b7160e01b600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff82111761227857604052565b67ffffffffffffffff811161227857601f01601f191660200190565b81601f8201121561219e578035906122e4826122b1565b926122f2604051948561228e565b8284526020838301011161219e57816000926020809301838601378301015290565b67ffffffffffffffff81116122785760051b60200190565b9080601f8301121561219e57602090823561234681612314565b93612354604051958661228e565b81855260208086019260051b82010192831161219e57602001905b82821061237d575050505090565b8135815290830190830161236f565b600019811461239b5760010190565b634e487b7160e01b600052601160045260246000fd5b90600182811c921680156123e1575b60208310146123cb57565b634e487b7160e01b600052602260045260246000fd5b91607f16916123c0565b156123f257565b606460405162461bcd60e51b815260206004820152601660248201527f5265736572766573206e6f742074616b656e20796574000000000000000000006044820152fd5b9190820180921161239b57565b919073ffffffffffffffffffffffffffffffffffffffff90818116156124bd576124708291843391613079565b931692169082820361248157505050565b60649350604051927f64283d7b000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b60246040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152fd5b156124f557565b606460405162461bcd60e51b815260206004820152601660248201527f5075626c69632073616c65206e6f7420616374697665000000000000000000006044820152fd5b1561254057565b606460405162461bcd60e51b815260206004820152601260248201527f45786365656473206d617820737570706c7900000000000000000000000000006044820152fd5b1561258b57565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c69642066756e64732070726f7669646564000000000000000000006044820152fd5b600a5481101561260657600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190600090565b634e487b7160e01b600052603260045260246000fd5b1561262357565b606460405162461bcd60e51b815260206004820152601e60248201527f455243373231467265657a61626c653a205552492069732066726f7a656e00006044820152fd5b80518210156126065760209160051b010190565b929161268682612314565b91612694604051938461228e565b829481845260208094019160051b810192831161219e57905b8282106126ba5750505050565b813581529083019083016126ad565b73ffffffffffffffffffffffffffffffffffffffff1680156126f657600052600560205260406000205490565b60246040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152fd5b1561272e57565b608460405162461bcd60e51b815260206004820152602260248201527f455243373231467265657a61626c653a20555249206973206e6f742066726f7a60448201527f656e0000000000000000000000000000000000000000000000000000000000006064820152fd5b6127a3838383612443565b813b6127b0575b50505050565b73ffffffffffffffffffffffffffffffffffffffff949192939480931693604051937f150b7a02000000000000000000000000000000000000000000000000000000009283865233600487015216602485015260448401526080606484015282612820602096608483019061215d565b039285816000958187895af1849181612914575b506128ac575050503d6000146128a4573d61284e816122b1565b9061285c604051928361228e565b81528091843d92013e5b8051928361289f57602483604051907f64a0ae920000000000000000000000000000000000000000000000000000000082526004820152fd5b019050fd5b506060612866565b9092507fffffffff0000000000000000000000000000000000000000000000000000000091945016036128e35750388080806127aa565b602490604051907f64a0ae920000000000000000000000000000000000000000000000000000000082526004820152fd5b9091508681813d8311612965575b61292c818361228e565b8101031261053557517fffffffff0000000000000000000000000000000000000000000000000000000081168103610535579038612834565b503d612922565b9061297682612e99565b506040519160009260125461298a816123b1565b9283835260209384840192600190600181169081600014612af15750600114612a9a575b50506129be83859697038461228e565b825160009015612a815750916129ee93916129db612a0e94613521565b906040519586935180928686019061213a565b8201612a028251809386808501910161213a565b0103808452018261228e565b805115612a6c576025612a69917f2e6a736f6e000000000000000000000000000000000000000000000000000000936040519482612a55879451809285808801910161213a565b83019182015203600581018452018261228e565b90565b5050604051612a7a8161225c565b6000815290565b935050505060405190612a938261225c565b8152612a0e565b6012600090815297507fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34445b828910612ade575050509482018301946129be836129ae565b8054868a01880152978601978101612ac5565b60ff191685525050151560051b8301840195506129be836129ae565b73ffffffffffffffffffffffffffffffffffffffff600f54163303612b2e57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff8083169283156124bd5760ff600e541680612e45575b50612b936134eb565b6000928084526004946020918683526040948587205416938415948386159687612df5575b818a5260058752888a2060018154019055848a528a8752888a20827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558482847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8d80a415612d875750600a54838952600b865280888a205568010000000000000000811015612d74579083612c5d6112e9846001899601600a556125cf565b90555b03612d26575b50505060ff600e5460081c16158015612d1f575b15612cb75750612c8957505050565b6024935051917f73c6ac6e000000000000000000000000000000000000000000000000000000008352820152fd5b8460849184519162461bcd60e51b8352820152602760248201527f4552433732314d696e745061757361626c653a204d696e74696e67206973206460448201527f697361626c6564000000000000000000000000000000000000000000000000006064820152fd5b5081612c7a565b612d2f906126c9565b916000198301928311612d61578652600883528486208287528352808587205585526009825283852055388080612c66565b60248760118a634e487b7160e01b835252fd5b60248960418c634e487b7160e01b835252fd5b90808214612c6057612d98816126c9565b848a5260098752888a205490828b5260088852898b2091818103612dd2575b50858b52600988528a8a8120558a5286528888812055612c60565b818c528289528a8c2054818d528b8d208190558c52600989528a8c205538612db7565b612e2e85600052600660205260406000207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b828a5260058752888a206000198154019055612bb8565b612e4e90612727565b827fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207612e90612e7c8361296c565b60405191829160208352602083019061215d565b0390a238612b8a565b80600052600460205273ffffffffffffffffffffffffffffffffffffffff60406000205416908115612ec9575090565b602490604051907f7e2732890000000000000000000000000000000000000000000000000000000082526004820152fd5b600260105414612f0b576002601055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b90612f7e612f709160405192839173ffffffffffffffffffffffffffffffffffffffff6020840196168652604080840152606083019061215d565b03601f19810183528261228e565b51902090565b73ffffffffffffffffffffffffffffffffffffffff809181600e5460101c1680612fcc575b501660005260076020526040600020911660005260205260ff6040600020541690565b6024919250602090604051928380927fc455279100000000000000000000000000000000000000000000000000000000825287871660048301525afa90811561306d57600091613032575b5082168383161461302a57819038612fa9565b505050600190565b6020813d602011613065575b8161304b6020938361228e565b810103126102a2575190838216820361031e575038613017565b3d915061303e565b6040513d6000823e3d90fd5b9060ff600e541680613454575b5061308f6134eb565b60009181835260049260209284845273ffffffffffffffffffffffffffffffffffffffff91604093838583205416978481168015159081613379575b50505087159081159485613329575b8116918215908115613313575b858552898952878520847fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905585848c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8880a4156132a757600a54858552600b8952808886205568010000000000000000811015613294576131786112e9826001899401600a556125cf565b90555b15613243575050600a54916000199283810190811161323057818352600b87526131a886842054916125cf565b90549060031b1c806131bc6112e9846125cf565b90558352600b87528583205581528084812055600a5490811561321d57508101906131e6826125cf565b909182549160031b1b19169055600a555b60ff600e5460081c1615908115613215575b50156113915750505090565b905038613209565b80603188634e487b7160e01b6024945252fd5b60248360118a634e487b7160e01b835252fd5b818994929403613257575b505050506131f7565b613260906126c9565b926000198401938411613230578252600886528482208383528652848220819055815260098552839020553880808061324e565b60248560418c634e487b7160e01b835252fd5b89831461317b576132b78a6126c9565b8585526009895287852054908b865260088a52888620918181036132f1575b5086865260098a52858981205585528852838781205561317b565b818752828b5289872054818852808b892055875260098b5289872055386132d6565b83855260058952878520600181540190556130e7565b61336285600052600660205260406000207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b8984526005885286842060001981540190556130da565b81613412575b501561338c5780806130cb565b8784878b6133c2576024935051917f7e273289000000000000000000000000000000000000000000000000000000008352820152fd5b517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316918301918252602082015281906040010390fd5b8a811491508115613442575b811561342c575b503861337f565b9050848452600688528587852054161438613425565b905061344e828b612f84565b9061341e565b61345d90612727565b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761348b612e7c8361296c565b0390a238613086565b929091906000915b84518310156134e3576134af8386612667565b51906000828210156134d25750600052602052600160406000205b92019161349c565b6040916001938252602052206134ca565b915092501490565b60ff600c54166134f757565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000080821015613688575b506d04ee2d6d415b85acef810000000080831015613679575b50662386f26fc100008083101561366a575b506305f5e1008083101561365b575b506127108083101561364c575b50606482101561363c575b600a80921015613632575b6001908160216001860195601f196135d76135c1896122b1565b986135cf6040519a8b61228e565b808a526122b1565b01366020890137860101905b6135ef575b5050505090565b600019849101917f30313233343536373839616263646566000000000000000000000000000000008282061a83530491821561362d579190826135e3565b6135e8565b91600101916135a7565b919060646002910491019161359c565b60049193920491019138613591565b60089193920491019138613584565b60109193920491019138613575565b60209193920491019138613563565b60409350810491503861354a56fea264697066735822122041abb341b1da9f3a3eb59e19e6013ab141c876ed7ca93c837d378fa90fa1d76664736f6c63430008180033",
              "opcodes": "PUSH1 0x40 PUSH1 0xA0 DUP2 MSTORE CALLVALUE PUSH3 0x574 JUMPI PUSH3 0x3CDE DUP1 CODESIZE SUB DUP1 PUSH3 0x1E DUP2 PUSH3 0x579 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0xA0 DUP3 DUP3 SUB SLT PUSH3 0x574 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH3 0x574 JUMPI DUP2 PUSH3 0x50 SWAP2 DUP6 ADD PUSH3 0x59F JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP2 DUP3 DUP6 ADD MLOAD DUP5 DUP2 GT PUSH3 0x574 JUMPI DUP3 PUSH3 0x6E SWAP2 DUP8 ADD PUSH3 0x59F JUMP JUMPDEST SWAP2 DUP7 DUP7 ADD MLOAD SWAP1 DUP6 DUP3 GT PUSH3 0x574 JUMPI PUSH3 0x89 SWAP2 DUP8 ADD PUSH3 0x59F JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 SWAP1 SWAP4 SWAP1 DUP8 DUP6 AND DUP6 SUB PUSH3 0x574 JUMPI PUSH1 0x80 ADD MLOAD SWAP4 DUP8 DUP6 AND SWAP8 DUP9 DUP7 SUB PUSH3 0x574 JUMPI DUP5 MLOAD SWAP2 DUP9 DUP4 GT PUSH3 0x29A JUMPI PUSH1 0x2 SLOAD SWAP3 PUSH1 0x1 SWAP7 DUP8 DUP6 DUP2 SHR SWAP6 AND DUP1 ISZERO PUSH3 0x569 JUMPI JUMPDEST DUP11 DUP7 LT EQ PUSH3 0x38D JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP6 DUP7 DUP2 GT PUSH3 0x512 JUMPI JUMPDEST POP DUP11 SWAP1 DUP7 DUP4 GT PUSH1 0x1 EQ PUSH3 0x4A6 JUMPI PUSH1 0x0 SWAP3 PUSH3 0x49A JUMPI JUMPDEST POP POP PUSH1 0x0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP8 SHL OR PUSH1 0x2 SSTORE JUMPDEST DUP4 MLOAD DUP10 DUP2 GT PUSH3 0x29A JUMPI PUSH1 0x3 SWAP5 DUP6 SLOAD SWAP1 DUP9 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH3 0x48F JUMPI JUMPDEST DUP12 DUP4 LT EQ PUSH3 0x38D JUMPI DUP2 DUP7 DUP5 SWAP4 GT PUSH3 0x439 JUMPI JUMPDEST POP DUP11 SWAP1 DUP7 DUP4 GT PUSH1 0x1 EQ PUSH3 0x3D2 JUMPI PUSH1 0x0 SWAP3 PUSH3 0x3C6 JUMPI JUMPDEST POP POP PUSH1 0x0 NOT DUP3 DUP8 SHL SHR NOT AND SWAP1 DUP8 SHL OR DUP5 SSTORE JUMPDEST PUSH1 0xE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND PUSH1 0x10 SWAP3 SWAP1 SWAP3 SHL PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE CALLER ISZERO PUSH3 0x3AE JUMPI PUSH1 0xF DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 DUP4 PUSH1 0x10 SSTORE PUSH1 0xFF NOT PUSH1 0x14 SLOAD AND PUSH1 0x14 SSTORE DUP3 MLOAD SWAP3 DUP8 DUP5 GT PUSH3 0x29A JUMPI PUSH1 0x12 SLOAD DUP6 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH3 0x3A3 JUMPI JUMPDEST DUP9 DUP3 LT EQ PUSH3 0x38D JUMPI DUP3 DUP2 GT PUSH3 0x341 JUMPI JUMPDEST POP DUP7 SWAP2 DUP5 GT PUSH1 0x1 EQ PUSH3 0x2D4 JUMPI SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH1 0x0 SWAP6 PUSH3 0x2C8 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH1 0x0 NOT SWAP2 SHL SHR NOT AND OR PUSH1 0x12 SSTORE JUMPDEST DUP4 ISZERO PUSH3 0x2B0 JUMPI PUSH1 0x80 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP3 DUP4 GT DUP2 DUP5 LT OR PUSH3 0x29A JUMPI SWAP2 DUP5 MSTORE DUP3 DUP3 MSTORE PUSH2 0x1F4 SWAP2 ADD MSTORE PUSH1 0x7D PUSH1 0xA2 SHL OR PUSH1 0x0 SSTORE MLOAD PUSH2 0x36CC SWAP1 DUP2 PUSH3 0x612 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x110D ADD MSTORE DUP2 DUP2 PUSH2 0x16FA ADD MSTORE PUSH2 0x1E30 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP5 MLOAD PUSH4 0x2A042E7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x24 SWAP1 REVERT JUMPDEST ADD MLOAD SWAP4 POP CODESIZE DUP1 PUSH3 0x234 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1F NOT DUP5 AND SWAP3 PUSH1 0x12 PUSH1 0x0 MSTORE DUP5 DUP9 PUSH1 0x0 KECCAK256 SWAP5 PUSH1 0x0 JUMPDEST DUP11 DUP10 DUP4 DUP4 LT PUSH3 0x329 JUMPI POP POP POP LT PUSH3 0x30E JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD PUSH1 0x12 SSTORE PUSH3 0x245 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH1 0x0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 DUP1 PUSH3 0x2FE JUMP JUMPDEST DUP7 DUP7 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP ADD PUSH3 0x2EA JUMP JUMPDEST PUSH1 0x12 PUSH1 0x0 MSTORE DUP8 PUSH1 0x0 KECCAK256 DUP4 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP11 DUP9 LT PUSH3 0x383 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP7 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH3 0x376 JUMPI POP POP PUSH3 0x218 JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE ADD DUP7 SWAP1 PUSH3 0x366 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH3 0x35D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH3 0x206 JUMP JUMPDEST DUP10 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 SWAP1 REVERT JUMPDEST ADD MLOAD SWAP1 POP CODESIZE DUP1 PUSH3 0x161 JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE DUP13 DUP2 KECCAK256 DUP12 SWAP6 POP SWAP3 SWAP2 SWAP1 PUSH1 0x1F NOT DUP6 AND SWAP1 DUP15 JUMPDEST DUP3 DUP3 LT PUSH3 0x421 JUMPI POP POP DUP5 GT PUSH3 0x408 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP5 SSTORE PUSH3 0x173 JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT DUP4 DUP10 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH3 0x3FA JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP14 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD DUP15 PUSH3 0x3E8 JUMP JUMPDEST SWAP1 SWAP2 POP DUP7 PUSH1 0x0 MSTORE DUP11 PUSH1 0x0 KECCAK256 DUP7 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP14 DUP7 LT PUSH3 0x485 JUMPI JUMPDEST SWAP2 DUP12 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH3 0x475 JUMPI POP POP PUSH3 0x14A JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE DUP6 SWAP5 POP DUP12 SWAP2 ADD PUSH3 0x465 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH3 0x457 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH3 0x136 JUMP JUMPDEST ADD MLOAD SWAP1 POP CODESIZE DUP1 PUSH3 0x103 JUMP JUMPDEST SWAP1 DUP10 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 PUSH1 0x2 PUSH1 0x0 MSTORE DUP13 PUSH1 0x0 KECCAK256 SWAP3 DUP14 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH3 0x4FA JUMPI POP POP DUP5 GT PUSH3 0x4E0 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE PUSH3 0x118 JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH3 0x4D1 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP14 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD DUP15 PUSH3 0x4BF JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x2 PUSH1 0x0 MSTORE DUP11 PUSH1 0x0 KECCAK256 DUP7 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP14 DUP7 LT PUSH3 0x55F JUMPI JUMPDEST SWAP2 DUP12 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH3 0x54F JUMPI POP POP PUSH3 0xEC JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE DUP6 SWAP5 POP DUP12 SWAP2 ADD PUSH3 0x53F JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH3 0x531 JUMP JUMPDEST SWAP5 PUSH1 0x7F AND SWAP5 PUSH3 0xD5 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH3 0x29A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH3 0x574 JUMPI DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH3 0x29A JUMPI PUSH1 0x20 SWAP1 PUSH3 0x5D5 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD PUSH3 0x579 JUMP JUMPDEST SWAP3 DUP2 DUP5 MSTORE DUP3 DUP3 DUP8 ADD ADD GT PUSH3 0x574 JUMPI PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH3 0x5FD JUMPI POP DUP3 PUSH1 0x0 SWAP4 SWAP5 SWAP6 POP ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP6 DUP2 ADD DUP4 ADD MLOAD DUP5 DUP3 ADD DUP5 ADD MSTORE DUP3 ADD PUSH3 0x5E7 JUMP INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x1FFC9A7 EQ PUSH2 0x1EDD JUMPI POP DUP2 PUSH4 0x29877B6 EQ PUSH2 0x1E08 JUMPI DUP2 PUSH4 0x54F7D9C EQ PUSH2 0x1DE4 JUMPI DUP2 PUSH4 0x6FDDE03 EQ PUSH2 0x1D31 JUMPI DUP2 PUSH4 0x81812FC EQ PUSH2 0x1CE9 JUMPI DUP2 PUSH4 0x922F9C5 EQ PUSH2 0x2A6 JUMPI DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x1BD4 JUMPI DUP2 PUSH4 0xC1C972A EQ PUSH2 0x1BA7 JUMPI DUP2 PUSH4 0x163E1E61 EQ PUSH2 0x1ABB JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x1A9C JUMPI DUP2 PUSH4 0x1A8BD2DA EQ PUSH2 0x19DF JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x19C7 JUMPI DUP2 PUSH4 0x2A55205A EQ PUSH2 0x1904 JUMPI DUP2 PUSH4 0x2DB11544 EQ PUSH2 0x1809 JUMPI DUP2 PUSH4 0x2F745C59 EQ PUSH2 0x1754 JUMPI DUP2 PUSH4 0x32CB6B0C EQ PUSH2 0x1738 JUMPI DUP2 PUSH4 0x3CCFD60B EQ PUSH2 0x16BC JUMPI DUP2 PUSH4 0x3F4BA83A EQ PUSH2 0x1639 JUMPI DUP2 PUSH4 0x42842E0E EQ PUSH2 0x1610 JUMPI DUP2 PUSH4 0x42966C68 EQ PUSH2 0x11EF JUMPI DUP2 PUSH4 0x4F6CCCE7 EQ PUSH2 0x1181 JUMPI DUP2 PUSH4 0x501A5162 EQ PUSH2 0x1131 JUMPI DUP2 PUSH4 0x521EB273 EQ PUSH2 0x10E0 JUMPI DUP2 PUSH4 0x55F804B3 EQ PUSH2 0xF44 JUMPI DUP2 PUSH4 0x5A4FEE30 EQ PUSH2 0xEBB JUMPI DUP2 PUSH4 0x5C975ABB EQ PUSH2 0xE97 JUMPI DUP2 PUSH4 0x62A5AF3B EQ PUSH2 0xE61 JUMPI DUP2 PUSH4 0x6352211E EQ PUSH2 0xE24 JUMPI DUP2 PUSH4 0x66FDDFA9 EQ PUSH2 0xCE5 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0xCB8 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xC38 JUMPI DUP2 PUSH4 0x7AD7614D EQ PUSH2 0xC16 JUMPI DUP2 PUSH4 0x7E4831D3 EQ PUSH2 0xBEF JUMPI DUP2 PUSH4 0x8456CB59 EQ PUSH2 0xB94 JUMPI DUP2 PUSH4 0x89CD503A EQ PUSH2 0xB5C JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0xB27 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0xA3D JUMPI DUP2 PUSH4 0xA0B30390 EQ PUSH2 0xA1E JUMPI DUP2 PUSH4 0xA22CB465 EQ PUSH2 0x95A JUMPI DUP2 PUSH4 0xB4402979 EQ PUSH2 0x93A JUMPI DUP2 PUSH4 0xB6854F96 EQ PUSH2 0x8E3 JUMPI DUP2 PUSH4 0xB88D4FDE EQ PUSH2 0x890 JUMPI DUP2 PUSH4 0xBD32FB66 EQ PUSH2 0x86E JUMPI DUP2 PUSH4 0xC4BE5B59 EQ PUSH2 0x693 JUMPI DUP2 PUSH4 0xC87B56DD EQ PUSH2 0x65B JUMPI DUP2 PUSH4 0xCD85CDB5 EQ PUSH2 0x5C1 JUMPI DUP2 PUSH4 0xD0BABF38 EQ PUSH2 0x5A4 JUMPI DUP2 PUSH4 0xD26EA6C0 EQ PUSH2 0x539 JUMPI DUP2 PUSH4 0xD283E3CC EQ PUSH2 0x4A7 JUMPI DUP2 PUSH4 0xD2BC37F8 EQ PUSH2 0x423 JUMPI DUP2 PUSH4 0xE985E9C5 EQ PUSH2 0x3EC JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0x321 JUMPI DUP2 PUSH4 0xF3993D11 EQ PUSH2 0x2AB JUMPI POP DUP1 PUSH4 0xF43A22DC EQ PUSH2 0x2A6 JUMPI PUSH4 0xFBD9B92D EQ PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH7 0x9536C708910000 DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x2182 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x2C5 PUSH2 0x21A3 JUMP JUMPDEST SWAP2 PUSH2 0x2CE PUSH2 0x21C6 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x31A JUMPI PUSH2 0x2ED SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x232C JUMP JUMPDEST DUP3 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x316 JUMPI DUP1 PUSH2 0x310 PUSH2 0x308 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x2667 JUMP JUMPDEST MLOAD DUP6 DUP9 PUSH2 0x2443 JUMP JUMPDEST ADD PUSH2 0x2EF JUMP JUMPDEST DUP4 DUP1 RETURN JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x33C PUSH2 0x21A3 JUMP JUMPDEST SWAP1 PUSH2 0x345 PUSH2 0x2B0D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x3B9 JUMPI POP POP PUSH1 0xF SLOAD DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND OR PUSH1 0xF SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST SWAP1 DUP5 PUSH1 0x24 SWAP3 MLOAD SWAP2 PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x41A PUSH2 0x40C PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x414 PUSH2 0x21C6 JUMP JUMPDEST SWAP1 PUSH2 0x2F84 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x443 PUSH1 0xFF PUSH1 0xE SLOAD AND PUSH2 0x2727 JUMP JUMPDEST PUSH1 0xA SLOAD SWAP1 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x456 JUMPI DUP4 DUP1 RETURN JUMPDEST DUP1 DUP1 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x49A PUSH2 0x488 PUSH2 0x4A2 SWAP6 PUSH2 0x296C JUMP JUMPDEST DUP7 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP1 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x238C JUMP JUMPDEST PUSH2 0x44A JUMP JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x4C2 PUSH2 0x21A3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP1 SWAP5 SUB PUSH2 0x535 JUMPI DUP4 PUSH2 0x50E JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 KECCAK256 SWAP1 DUP2 SLOAD ADD SWAP1 SSTORE DUP1 RETURN JUMPDEST DUP3 MLOAD PUSH32 0x59171FC100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x553 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x55B PUSH2 0x2B0D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FFFF PUSH22 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 PUSH1 0xE SLOAD SWAP3 PUSH1 0x10 SHL AND SWAP2 AND OR PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x1F4 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x5DB PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0xE SLOAD SWAP2 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND PUSH2 0x618 JUMPI DUP4 PUSH2 0x100 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF DUP6 AND OR PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E742070617573656400 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI POP PUSH2 0x67C PUSH2 0x68F SWAP3 CALLDATALOAD PUSH2 0x296C JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x86A JUMPI PUSH2 0x6CA PUSH2 0x720 SWAP5 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x21E9 JUMP JUMPDEST SWAP5 SWAP1 PUSH2 0x6D4 PUSH2 0x2EFA JUMP JUMPDEST PUSH1 0x11 SWAP6 PUSH2 0x6FA PUSH1 0x6F PUSH2 0x6F3 DUP11 PUSH1 0x11 SLOAD PUSH2 0x6EE DUP2 ISZERO ISZERO PUSH2 0x23EB JUMP JUMPDEST PUSH2 0x2436 JUMP JUMPDEST GT ISZERO PUSH2 0x2539 JUMP JUMPDEST PUSH2 0x71B PUSH2 0x70F PUSH2 0x709 DUP7 PUSH2 0x3521 JUMP JUMPDEST CALLER PUSH2 0x2F35 JUMP JUMPDEST SWAP3 PUSH1 0xD SLOAD SWAP3 CALLDATASIZE SWAP2 PUSH2 0x267B JUMP JUMPDEST PUSH2 0x3494 JUMP JUMPDEST ISZERO PUSH2 0x801 JUMPI CALLER DUP7 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE PUSH2 0x73A DUP6 DUP5 DUP9 KECCAK256 SLOAD PUSH2 0x2436 JUMP JUMPDEST GT PUSH2 0x7BF JUMPI PUSH7 0x18838370F34000 SWAP1 DUP2 DUP6 MUL SWAP2 DUP6 DUP4 DIV EQ DUP6 ISZERO OR ISZERO PUSH2 0x7AC JUMPI POP PUSH2 0x764 SWAP1 CALLVALUE EQ PUSH2 0x2584 JUMP JUMPDEST CALLER DUP5 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE DUP4 KECCAK256 PUSH2 0x779 DUP4 DUP3 SLOAD PUSH2 0x2436 JUMP JUMPDEST SWAP1 SSTORE DUP3 JUMPDEST DUP3 DUP2 LT PUSH2 0x78D JUMPI DUP4 PUSH1 0x1 PUSH1 0x10 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x7A6 PUSH2 0x79D DUP5 SLOAD PUSH2 0x238C JUMP JUMPDEST DUP1 DUP6 SSTORE CALLER PUSH2 0x2B5E JUMP JUMPDEST ADD PUSH2 0x77D JUMP JUMPDEST DUP6 PUSH1 0x11 PUSH1 0x24 SWAP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x457863656564732077686974656C69737420616C6C6F77616E63650000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x84 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964204D65726B6C6520547265652070726F6F6620737570706C69 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6564000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x889 PUSH2 0x2B0D JUMP JUMPDEST CALLDATALOAD PUSH1 0xD SSTORE DUP1 RETURN JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x8AB PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x8B3 PUSH2 0x21C6 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x535 JUMPI PUSH2 0x8E0 SWAP4 PUSH2 0x8D6 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x2798 JUMP JUMPDEST DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x934 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 SWAP2 CALLDATALOAD SWAP3 PUSH2 0x92B PUSH1 0xFF PUSH1 0xE SLOAD AND PUSH2 0x2727 JUMP JUMPDEST PUSH2 0x67C DUP5 PUSH2 0x296C JUMP JUMPDEST SUB SWAP1 LOG2 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x953 PUSH2 0x2B0D JUMP JUMPDEST DUP1 PUSH1 0xD SSTORE DUP1 RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x975 PUSH2 0x21A3 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO DUP1 SWAP4 SUB PUSH2 0x535 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 DUP4 ISZERO PUSH2 0x9F0 JUMPI POP CALLER DUP5 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE DUP1 DUP5 KECCAK256 DUP4 DUP6 MSTORE PUSH1 0x20 MSTORE DUP1 DUP5 KECCAK256 PUSH1 0xFF NOT DUP2 SLOAD AND PUSH1 0xFF DUP5 AND OR SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 PUSH1 0x20 CALLER SWAP3 LOG3 DUP1 RETURN JUMPDEST DUP4 PUSH1 0x24 SWAP3 MLOAD SWAP2 PUSH32 0x5B08BA1800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xD SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI DUP2 MLOAD SWAP2 DUP3 DUP3 PUSH1 0x3 SLOAD PUSH2 0xA60 DUP2 PUSH2 0x23B1 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH1 0x0 EQ PUSH2 0xB00 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xAA4 JUMPI JUMPDEST POP POP POP PUSH2 0x68F SWAP3 SWAP2 PUSH2 0xA95 SWAP2 SUB DUP6 PUSH2 0x228E JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SWAP2 SWAP1 DUP7 SWAP4 POP PUSH1 0x3 DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0xAE8 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xA95 PUSH2 0x68F PUSH2 0xA82 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xACF JUMP JUMPDEST PUSH1 0xFF NOT AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0xA95 SWAP2 POP PUSH2 0x68F SWAP1 POP PUSH2 0xA82 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xF SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xE SLOAD PUSH1 0x10 SHR AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 SWAP2 PUSH2 0xBD2 PUSH2 0x2B0D JUMP JUMPDEST PUSH2 0xBDA PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0xC SLOAD AND OR PUSH1 0xC SSTORE MLOAD CALLER DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH7 0x18838370F34000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0xC51 PUSH2 0x2B0D JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xF SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH1 0xF SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xCDE PUSH2 0xCD9 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x26C9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x2A2 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x31A JUMPI PUSH2 0xD17 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x31E JUMPI POP PUSH2 0xD33 PUSH2 0xD47 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x21E9 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xD3F DUP6 CALLER PUSH2 0x2F35 JUMP JUMPDEST SWAP3 CALLDATASIZE SWAP2 PUSH2 0x267B JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 DUP2 ISZERO PUSH2 0xDE1 JUMPI SWAP1 PUSH2 0xD5C SWAP3 SWAP2 PUSH2 0x3494 JUMP JUMPDEST ISZERO PUSH2 0xD78 JUMPI POP PUSH2 0x68F SWAP2 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST PUSH1 0x84 SWAP1 PUSH1 0x20 DUP5 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964204D65726B6C6520547265652070726F6F6620737570706C69 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x65642E0000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x64 DUP5 PUSH1 0x20 DUP9 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57686974656C697374206D65726B6C6520726F6F74206E6F7420736574000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE59 PUSH1 0x20 SWAP4 CALLDATALOAD PUSH2 0x2E99 JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0xE7A PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0xE SLOAD PUSH2 0xE8F PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x261C JUMP JUMPDEST AND OR PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0xC SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0xED5 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0xEDD PUSH2 0x21C6 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x44 CALLDATALOAD DUP6 DUP2 GT PUSH2 0x535 JUMPI PUSH2 0xEFE SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x232C JUMP JUMPDEST SWAP5 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x535 JUMPI PUSH2 0xF15 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP4 DUP4 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xF40 JUMPI DUP1 PUSH2 0xF3A DUP8 PUSH2 0xF32 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2667 JUMP JUMPDEST MLOAD DUP7 DUP9 PUSH2 0x2798 JUMP JUMPDEST ADD PUSH2 0xF18 JUMP JUMPDEST DUP5 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x31A JUMPI PUSH2 0xF77 SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP4 PUSH2 0xF80 PUSH2 0x2B0D JUMP JUMPDEST PUSH2 0xF8F PUSH1 0xFF PUSH1 0xE SLOAD AND ISZERO PUSH2 0x261C JUMP JUMPDEST DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x10CD JUMPI POP PUSH2 0xFA4 PUSH1 0x12 SLOAD PUSH2 0x23B1 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x106A JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xFE9 JUMPI POP DUP3 SWAP4 DUP3 SWAP4 SWAP3 PUSH2 0xFDE JUMPI JUMPDEST POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x12 SSTORE DUP1 RETURN JUMPDEST ADD MLOAD SWAP1 POP DUP4 DUP1 PUSH2 0xFC7 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP5 PUSH1 0x12 DUP6 MSTORE PUSH32 0xBB8A6A4669BA250D26CD7A459ECA9D215F8307E33AEBE50379BC5A3617EC3444 SWAP3 DUP6 SWAP1 JUMPDEST DUP8 DUP3 LT PUSH2 0x1052 JUMPI POP POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x1039 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x12 SSTORE DUP1 RETURN JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE DUP4 DUP1 DUP1 PUSH2 0x102D JUMP JUMPDEST DUP1 PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x1019 JUMP JUMPDEST PUSH1 0x12 DUP5 MSTORE PUSH32 0xBB8A6A4669BA250D26CD7A459ECA9D215F8307E33AEBE50379BC5A3617EC3444 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP6 LT PUSH2 0x10C3 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x10B8 JUMPI POP PUSH2 0xFAD JUMP JUMPDEST DUP5 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x10AB JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x10A2 JUMP JUMPDEST DUP4 PUSH1 0x41 PUSH1 0x24 SWAP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x114C PUSH2 0x21A3 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP6 AND DUP6 SUB PUSH2 0x31E JUMPI POP PUSH1 0x20 SWAP4 PUSH2 0xE59 SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x3079 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP1 CALLDATALOAD SWAP3 PUSH1 0xA SLOAD DUP5 LT ISZERO PUSH2 0x11BB JUMPI PUSH1 0x20 DUP4 PUSH2 0x11AD DUP7 PUSH2 0x25CF JUMP JUMPDEST SWAP2 SWAP1 SLOAD SWAP1 MLOAD SWAP2 PUSH1 0x3 SHL SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x44 SWAP4 SWAP2 SWAP3 MLOAD SWAP3 PUSH32 0xA57D13DC00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31A JUMPI DUP3 CALLDATALOAD PUSH1 0xFF PUSH1 0xE SLOAD AND DUP1 PUSH2 0x15BF JUMPI JUMPDEST POP PUSH2 0x121C PUSH2 0x34EB JUMP JUMPDEST DUP1 DUP6 MSTORE DUP4 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 DUP8 KECCAK256 SLOAD AND SWAP2 CALLER ISZERO ISZERO SWAP1 DUP2 PUSH2 0x14F9 JUMPI JUMPDEST POP POP DUP2 ISZERO SWAP2 DUP3 ISZERO DUP1 SWAP4 DUP2 PUSH2 0x14A9 JUMPI JUMPDEST DUP4 DUP10 MSTORE DUP8 DUP8 MSTORE DUP6 DUP10 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP4 DUP10 DUP5 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP3 DUP1 LOG4 ISZERO PUSH2 0x1439 JUMPI POP POP PUSH1 0xA SLOAD DUP2 DUP8 MSTORE PUSH1 0xB DUP6 MSTORE DUP1 DUP5 DUP9 KECCAK256 SSTORE PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x1426 JUMPI PUSH2 0x1300 PUSH2 0x12E9 DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH1 0xA SSTORE PUSH2 0x25CF JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH1 0x0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST PUSH1 0xA SLOAD SWAP1 PUSH1 0x0 NOT SWAP2 DUP3 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1413 JUMPI DUP2 DUP9 MSTORE PUSH1 0xB DUP7 MSTORE PUSH2 0x1329 DUP6 DUP10 KECCAK256 SLOAD SWAP2 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR DUP1 PUSH2 0x133D PUSH2 0x12E9 DUP5 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE DUP9 MSTORE PUSH1 0xB DUP7 MSTORE DUP5 DUP9 KECCAK256 SSTORE DUP7 MSTORE DUP6 DUP4 DUP2 KECCAK256 SSTORE PUSH1 0xA SLOAD DUP1 ISZERO PUSH2 0x1400 JUMPI DUP2 ADD SWAP1 PUSH2 0x1365 DUP3 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH1 0xA SSTORE PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND ISZERO SWAP1 DUP2 ISZERO PUSH2 0x13F8 JUMPI JUMPDEST POP ISZERO PUSH2 0x1391 JUMPI DUP4 DUP1 RETURN JUMPDEST PUSH1 0x84 SWAP4 POP MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E74696E672069732064 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x697361626C656400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 POP CODESIZE PUSH2 0x1387 JUMP JUMPDEST PUSH1 0x24 DUP8 PUSH1 0x31 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP9 PUSH1 0x11 DUP10 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP8 PUSH1 0x41 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x1444 JUMPI JUMPDEST POP PUSH2 0x1303 JUMP JUMPDEST PUSH2 0x144D DUP2 PUSH2 0x26C9 JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH1 0x9 DUP7 MSTORE DUP5 DUP9 KECCAK256 SLOAD SWAP2 DUP9 MSTORE PUSH1 0x8 DUP7 MSTORE DUP5 DUP9 KECCAK256 SWAP2 DUP2 DUP2 SUB PUSH2 0x1487 JUMPI JUMPDEST POP DUP3 DUP9 MSTORE PUSH1 0x9 DUP7 MSTORE DUP8 DUP6 DUP2 KECCAK256 SSTORE DUP8 MSTORE DUP5 MSTORE DUP6 DUP4 DUP2 KECCAK256 SSTORE CODESIZE PUSH2 0x143E JUMP JUMPDEST DUP2 DUP10 MSTORE DUP3 DUP8 MSTORE DUP6 DUP10 KECCAK256 SLOAD DUP2 DUP11 MSTORE DUP1 DUP8 DUP12 KECCAK256 SSTORE DUP10 MSTORE PUSH1 0x9 DUP8 MSTORE DUP6 DUP10 KECCAK256 SSTORE CODESIZE PUSH2 0x146B JUMP JUMPDEST PUSH2 0x14E2 DUP5 PUSH1 0x0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE JUMP JUMPDEST DUP3 DUP10 MSTORE PUSH1 0x5 DUP8 MSTORE DUP6 DUP10 KECCAK256 PUSH1 0x0 NOT DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x1258 JUMP JUMPDEST DUP2 PUSH2 0x157D JUMPI JUMPDEST POP ISZERO PUSH2 0x150C JUMPI CODESIZE DUP1 PUSH2 0x1249 JUMP JUMPDEST SWAP4 SWAP3 POP PUSH2 0x1541 JUMPI SWAP2 PUSH1 0x24 SWAP3 MLOAD SWAP2 PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST MLOAD PUSH32 0x177E802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP2 DUP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP2 SWAP1 PUSH1 0x40 ADD SUB SWAP1 REVERT JUMPDEST CALLER DUP5 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x15AD JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1597 JUMPI JUMPDEST POP CODESIZE PUSH2 0x14FF JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH1 0x6 DUP7 MSTORE DUP5 DUP9 KECCAK256 SLOAD AND CALLER EQ SWAP1 POP CODESIZE PUSH2 0x1590 JUMP JUMPDEST SWAP1 POP PUSH2 0x15B9 CALLER DUP5 PUSH2 0x2F84 JUMP JUMPDEST SWAP1 PUSH2 0x1589 JUMP JUMPDEST PUSH2 0x15C8 SWAP1 PUSH2 0x2727 JUMP JUMPDEST DUP1 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x1607 PUSH2 0x15F6 DUP4 PUSH2 0x296C JUMP JUMPDEST DUP6 MLOAD SWAP2 DUP3 SWAP2 DUP9 DUP4 MSTORE DUP9 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 LOG2 CODESIZE PUSH2 0x1213 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI PUSH2 0x8E0 SWAP1 PUSH2 0x1624 CALLDATASIZE PUSH2 0x221A JUMP JUMPDEST SWAP2 SWAP3 MLOAD SWAP3 PUSH2 0x1631 DUP5 PUSH2 0x225C JUMP JUMPDEST DUP6 DUP5 MSTORE PUSH2 0x2798 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x1653 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x1695 JUMPI POP PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA SWAP2 PUSH1 0xFF NOT PUSH1 0x20 SWAP3 AND PUSH1 0xC SSTORE MLOAD CALLER DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST DUP3 MLOAD PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x16D6 PUSH2 0x2B0D JUMP JUMPDEST DUP2 DUP1 DUP1 DUP1 SELFBALANCE DUP2 DUP2 ISZERO PUSH2 0x172F JUMPI JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 CALL ISZERO PUSH2 0x1725 JUMPI POP DUP1 RETURN JUMPDEST MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH2 0x8FC PUSH2 0x16E3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x6F DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x176E PUSH2 0x21A3 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x177C DUP6 PUSH2 0x26C9 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x17B7 JUMPI POP SWAP1 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 SWAP6 AND DUP3 MSTORE PUSH1 0x8 DUP6 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP3 MLOAD PUSH32 0xA57D13DC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE POP DUP2 SWAP1 PUSH1 0x40 ADD SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x1823 PUSH2 0x2EFA JUMP JUMPDEST PUSH2 0x182F PUSH1 0xD SLOAD ISZERO PUSH2 0x24EE JUMP JUMPDEST PUSH2 0x183D PUSH1 0xFF PUSH1 0x14 SLOAD AND PUSH2 0x24EE JUMP JUMPDEST PUSH1 0x11 SWAP2 PUSH2 0x1857 PUSH1 0x6F PUSH2 0x6F3 DUP7 PUSH1 0x11 SLOAD PUSH2 0x6EE DUP2 ISZERO ISZERO PUSH2 0x23EB JUMP JUMPDEST PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x18C1 JUMPI POP PUSH7 0x9536C708910000 SWAP1 DUP2 DUP5 MUL SWAP2 DUP5 DUP4 DIV EQ DUP5 ISZERO OR ISZERO PUSH2 0x18AE JUMPI POP PUSH2 0x1886 SWAP1 CALLVALUE EQ PUSH2 0x2584 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP2 LT PUSH2 0x1898 JUMPI DUP4 PUSH1 0x1 PUSH1 0x10 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x18A8 PUSH2 0x79D DUP5 SLOAD PUSH2 0x238C JUMP JUMPDEST ADD PUSH2 0x1888 JUMP JUMPDEST DUP5 PUSH1 0x11 PUSH1 0x24 SWAP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45786365656473206D617820706572207472616E73616374696F6E0000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 DUP4 CALLDATALOAD DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 PUSH1 0xA0 SHR SWAP1 DUP5 ISZERO PUSH2 0x19A9 JUMPI JUMPDEST POP PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1996 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP2 MSTORE PUSH2 0x2710 DUP6 DIV PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 SWAP1 RETURN JUMPDEST DUP1 PUSH1 0x11 DUP7 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x24 SWAP5 MSTORE MSTORE REVERT JUMPDEST DUP3 SLOAD SWAP1 DUP2 AND SWAP5 POP PUSH1 0xA0 SHR SWAP1 POP PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x194C JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH2 0x8E0 PUSH2 0x19D9 CALLDATASIZE PUSH2 0x221A JUMP JUMPDEST SWAP2 PUSH2 0x2443 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x19F9 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0xE SLOAD SWAP2 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO PUSH2 0x1A33 JUMPI DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF DUP5 AND PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x84 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E74206E6F7420706175 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7365640000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xA SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x31A JUMPI PUSH2 0x1AEC SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x21E9 JUMP JUMPDEST SWAP2 PUSH2 0x1AF5 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x11 SWAP4 PUSH1 0x6F PUSH2 0x1B0C DUP6 PUSH1 0x11 SLOAD PUSH2 0x6EE DUP2 ISZERO ISZERO PUSH2 0x23EB JUMP JUMPDEST GT PUSH2 0x1B64 JUMPI POP POP DUP4 JUMPDEST DUP3 DUP2 LT PUSH2 0x1B20 JUMPI DUP5 DUP1 RETURN JUMPDEST DUP1 PUSH1 0x5 SHL DUP3 ADD CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x86A JUMPI PUSH2 0x1B5E PUSH1 0x1 SWAP3 PUSH2 0x1B55 DUP8 SLOAD PUSH2 0x238C JUMP JUMPDEST SWAP1 DUP2 DUP9 SSTORE PUSH2 0x2B5E JUMP JUMPDEST ADD PUSH2 0x1B15 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45786365646573206D617820737570706C790000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x1BC0 PUSH2 0x2B0D JUMP JUMPDEST DUP1 PUSH1 0xD SSTORE PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x14 SLOAD AND OR PUSH1 0x14 SSTORE DUP1 RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x1BEF PUSH2 0x21A3 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1BFD DUP3 PUSH2 0x2E99 JUMP JUMPDEST SWAP1 CALLER ISZERO ISZERO DUP1 PUSH2 0x1CC9 JUMPI JUMPDEST DUP1 PUSH2 0x1CB8 JUMPI JUMPDEST PUSH2 0x1C88 JUMPI POP DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 AND SWAP5 DUP6 SWAP2 AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP8 DUP1 LOG4 DUP4 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP3 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x24 SWAP1 DUP5 MLOAD SWAP1 PUSH32 0xA9FBF51F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER SWAP1 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH2 0x1CC3 CALLER DUP4 PUSH2 0x2F84 JUMP JUMPDEST ISZERO PUSH2 0x1C0D JUMP JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND EQ ISZERO PUSH2 0x1C07 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD PUSH2 0x1D20 DUP2 PUSH2 0x2E99 JUMP JUMPDEST POP DUP2 MSTORE PUSH1 0x6 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI DUP2 MLOAD SWAP2 DUP3 DUP3 PUSH1 0x2 SLOAD PUSH2 0x1D54 DUP2 PUSH2 0x23B1 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH1 0x0 EQ PUSH2 0xB00 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1D88 JUMPI POP POP POP PUSH2 0x68F SWAP3 SWAP2 PUSH2 0xA95 SWAP2 SUB DUP6 PUSH2 0x228E JUMP JUMPDEST SWAP2 SWAP1 DUP7 SWAP4 POP PUSH1 0x2 DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE JUMPDEST DUP3 DUP5 LT PUSH2 0x1DCC JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xA95 PUSH2 0x68F PUSH2 0xA82 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1DB3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0xE SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x1E22 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x11 SWAP2 PUSH1 0x11 SLOAD PUSH2 0x1E9A JUMPI POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1E76 JUMPI DUP4 DUP1 RETURN JUMPDEST PUSH2 0x1E95 SWAP1 PUSH2 0x1E90 PUSH2 0x1E87 DUP5 SLOAD PUSH2 0x238C JUMP JUMPDEST DUP1 DUP6 SSTORE DUP6 PUSH2 0x2B5E JUMP JUMPDEST PUSH2 0x238C JUMP JUMPDEST PUSH2 0x1E69 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x526573657276657320616C726561647920636F6C6C6563746564000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP5 SWAP2 CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x3E8 JUMPI PUSH1 0x20 SWAP3 POP PUSH32 0xE08307600000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP1 DUP2 ISZERO PUSH2 0x2110 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x20E6 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x20BC JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x2092 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x2068 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1F74 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x780E9D6300000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x1FA7 JUMPI JUMPDEST POP DUP4 PUSH2 0x1F6D JUMP JUMPDEST PUSH32 0x80AC58CD00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x203E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1FE1 JUMPI JUMPDEST POP DUP4 PUSH2 0x1FA0 JUMP JUMPDEST PUSH32 0x2A55205A00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x2014 JUMPI JUMPDEST POP DUP4 PUSH2 0x1FDA JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x200D JUMP JUMPDEST PUSH32 0x5B5E139F00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1FD3 JUMP JUMPDEST PUSH32 0x7E4831D300000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F66 JUMP JUMPDEST PUSH32 0x617605F200000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F5F JUMP JUMPDEST PUSH32 0xC64EDC3900000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F58 JUMP JUMPDEST PUSH32 0x79F154C400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F51 JUMP JUMPDEST PUSH32 0x42966C6800000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F4A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x214D JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x213D JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 SWAP4 PUSH2 0x217B DUP2 MLOAD DUP1 SWAP3 DUP2 DUP8 MSTORE DUP8 DUP1 DUP9 ADD SWAP2 ADD PUSH2 0x213A JUMP JUMPDEST ADD AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x219E JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x219E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x5 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x219E JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x219E JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x219E JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x219E JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x219E JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x219E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x219E JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x219E JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2278 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2278 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2278 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x219E JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x22E4 DUP3 PUSH2 0x22B1 JUMP JUMPDEST SWAP3 PUSH2 0x22F2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x228E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x219E JUMPI DUP2 PUSH1 0x0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2278 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x219E JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x2346 DUP2 PUSH2 0x2314 JUMP JUMPDEST SWAP4 PUSH2 0x2354 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x228E JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x219E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x237D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x236F JUMP JUMPDEST PUSH1 0x0 NOT DUP2 EQ PUSH2 0x239B JUMPI PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x23E1 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x23CB JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x23C0 JUMP JUMPDEST ISZERO PUSH2 0x23F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265736572766573206E6F742074616B656E2079657400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x239B JUMPI JUMP JUMPDEST SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND ISZERO PUSH2 0x24BD JUMPI PUSH2 0x2470 DUP3 SWAP2 DUP5 CALLER SWAP2 PUSH2 0x3079 JUMP JUMPDEST SWAP4 AND SWAP3 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x2481 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x64 SWAP4 POP PUSH1 0x40 MLOAD SWAP3 PUSH32 0x64283D7B00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x24 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x24F5 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5075626C69632073616C65206E6F742061637469766500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x2540 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45786365656473206D617820737570706C790000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x258B JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642066756E64732070726F766964656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0xA SLOAD DUP2 LT ISZERO PUSH2 0x2606 JUMPI PUSH1 0xA PUSH1 0x0 MSTORE PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 ADD SWAP1 PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ISZERO PUSH2 0x2623 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231467265657A61626C653A205552492069732066726F7A656E0000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2606 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x2686 DUP3 PUSH2 0x2314 JUMP JUMPDEST SWAP2 PUSH2 0x2694 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x228E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 SWAP5 ADD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP3 DUP4 GT PUSH2 0x219E JUMPI SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x26BA JUMPI POP POP POP POP JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x26AD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x26F6 JUMPI PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x24 PUSH1 0x40 MLOAD PUSH32 0x89C62B6400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x272E JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231467265657A61626C653A20555249206973206E6F742066726F7A PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH2 0x27A3 DUP4 DUP4 DUP4 PUSH2 0x2443 JUMP JUMPDEST DUP2 EXTCODESIZE PUSH2 0x27B0 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 SWAP2 SWAP3 SWAP4 SWAP5 DUP1 SWAP4 AND SWAP4 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x150B7A0200000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE DUP3 PUSH2 0x2820 PUSH1 0x20 SWAP7 PUSH1 0x84 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP3 DUP6 DUP2 PUSH1 0x0 SWAP6 DUP2 DUP8 DUP10 GAS CALL DUP5 SWAP2 DUP2 PUSH2 0x2914 JUMPI JUMPDEST POP PUSH2 0x28AC JUMPI POP POP POP RETURNDATASIZE PUSH1 0x0 EQ PUSH2 0x28A4 JUMPI RETURNDATASIZE PUSH2 0x284E DUP2 PUSH2 0x22B1 JUMP JUMPDEST SWAP1 PUSH2 0x285C PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x228E JUMP JUMPDEST DUP2 MSTORE DUP1 SWAP2 DUP5 RETURNDATASIZE SWAP3 ADD RETURNDATACOPY JUMPDEST DUP1 MLOAD SWAP3 DUP4 PUSH2 0x289F JUMPI PUSH1 0x24 DUP4 PUSH1 0x40 MLOAD SWAP1 PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST ADD SWAP1 POP REVERT JUMPDEST POP PUSH1 0x60 PUSH2 0x2866 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP2 SWAP5 POP AND SUB PUSH2 0x28E3 JUMPI POP CODESIZE DUP1 DUP1 DUP1 PUSH2 0x27AA JUMP JUMPDEST PUSH1 0x24 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2965 JUMPI JUMPDEST PUSH2 0x292C DUP2 DUP4 PUSH2 0x228E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x535 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x535 JUMPI SWAP1 CODESIZE PUSH2 0x2834 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2922 JUMP JUMPDEST SWAP1 PUSH2 0x2976 DUP3 PUSH2 0x2E99 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 PUSH1 0x0 SWAP3 PUSH1 0x12 SLOAD PUSH2 0x298A DUP2 PUSH2 0x23B1 JUMP JUMPDEST SWAP3 DUP4 DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP5 ADD SWAP3 PUSH1 0x1 SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 PUSH1 0x0 EQ PUSH2 0x2AF1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x2A9A JUMPI JUMPDEST POP POP PUSH2 0x29BE DUP4 DUP6 SWAP7 SWAP8 SUB DUP5 PUSH2 0x228E JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 SWAP1 ISZERO PUSH2 0x2A81 JUMPI POP SWAP2 PUSH2 0x29EE SWAP4 SWAP2 PUSH2 0x29DB PUSH2 0x2A0E SWAP5 PUSH2 0x3521 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 MLOAD DUP1 SWAP3 DUP7 DUP7 ADD SWAP1 PUSH2 0x213A JUMP JUMPDEST DUP3 ADD PUSH2 0x2A02 DUP3 MLOAD DUP1 SWAP4 DUP7 DUP1 DUP6 ADD SWAP2 ADD PUSH2 0x213A JUMP JUMPDEST ADD SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0x228E JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2A6C JUMPI PUSH1 0x25 PUSH2 0x2A69 SWAP2 PUSH32 0x2E6A736F6E000000000000000000000000000000000000000000000000000000 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP3 PUSH2 0x2A55 DUP8 SWAP5 MLOAD DUP1 SWAP3 DUP6 DUP1 DUP9 ADD SWAP2 ADD PUSH2 0x213A JUMP JUMPDEST DUP4 ADD SWAP2 DUP3 ADD MSTORE SUB PUSH1 0x5 DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x228E JUMP JUMPDEST SWAP1 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x2A7A DUP2 PUSH2 0x225C JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2A93 DUP3 PUSH2 0x225C JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2A0E JUMP JUMPDEST PUSH1 0x12 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP8 POP PUSH32 0xBB8A6A4669BA250D26CD7A459ECA9D215F8307E33AEBE50379BC5A3617EC3444 JUMPDEST DUP3 DUP10 LT PUSH2 0x2ADE JUMPI POP POP POP SWAP5 DUP3 ADD DUP4 ADD SWAP5 PUSH2 0x29BE DUP4 PUSH2 0x29AE JUMP JUMPDEST DUP1 SLOAD DUP7 DUP11 ADD DUP9 ADD MSTORE SWAP8 DUP7 ADD SWAP8 DUP2 ADD PUSH2 0x2AC5 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD DUP5 ADD SWAP6 POP PUSH2 0x29BE DUP4 PUSH2 0x29AE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xF SLOAD AND CALLER SUB PUSH2 0x2B2E JUMPI JUMP JUMPDEST PUSH1 0x24 PUSH1 0x40 MLOAD PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP3 DUP4 ISZERO PUSH2 0x24BD JUMPI PUSH1 0xFF PUSH1 0xE SLOAD AND DUP1 PUSH2 0x2E45 JUMPI JUMPDEST POP PUSH2 0x2B93 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP1 DUP5 MSTORE PUSH1 0x4 SWAP5 PUSH1 0x20 SWAP2 DUP7 DUP4 MSTORE PUSH1 0x40 SWAP5 DUP6 DUP8 KECCAK256 SLOAD AND SWAP4 DUP5 ISZERO SWAP5 DUP4 DUP7 ISZERO SWAP7 DUP8 PUSH2 0x2DF5 JUMPI JUMPDEST DUP2 DUP11 MSTORE PUSH1 0x5 DUP8 MSTORE DUP9 DUP11 KECCAK256 PUSH1 0x1 DUP2 SLOAD ADD SWAP1 SSTORE DUP5 DUP11 MSTORE DUP11 DUP8 MSTORE DUP9 DUP11 KECCAK256 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP5 DUP3 DUP5 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP14 DUP1 LOG4 ISZERO PUSH2 0x2D87 JUMPI POP PUSH1 0xA SLOAD DUP4 DUP10 MSTORE PUSH1 0xB DUP7 MSTORE DUP1 DUP9 DUP11 KECCAK256 SSTORE PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2D74 JUMPI SWAP1 DUP4 PUSH2 0x2C5D PUSH2 0x12E9 DUP5 PUSH1 0x1 DUP10 SWAP7 ADD PUSH1 0xA SSTORE PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SUB PUSH2 0x2D26 JUMPI JUMPDEST POP POP POP PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO PUSH2 0x2D1F JUMPI JUMPDEST ISZERO PUSH2 0x2CB7 JUMPI POP PUSH2 0x2C89 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x24 SWAP4 POP MLOAD SWAP2 PUSH32 0x73C6AC6E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST DUP5 PUSH1 0x84 SWAP2 DUP5 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E74696E672069732064 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x697361626C656400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST POP DUP2 PUSH2 0x2C7A JUMP JUMPDEST PUSH2 0x2D2F SWAP1 PUSH2 0x26C9 JUMP JUMPDEST SWAP2 PUSH1 0x0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0x2D61 JUMPI DUP7 MSTORE PUSH1 0x8 DUP4 MSTORE DUP5 DUP7 KECCAK256 DUP3 DUP8 MSTORE DUP4 MSTORE DUP1 DUP6 DUP8 KECCAK256 SSTORE DUP6 MSTORE PUSH1 0x9 DUP3 MSTORE DUP4 DUP6 KECCAK256 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x2C66 JUMP JUMPDEST PUSH1 0x24 DUP8 PUSH1 0x11 DUP11 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP10 PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 DUP1 DUP3 EQ PUSH2 0x2C60 JUMPI PUSH2 0x2D98 DUP2 PUSH2 0x26C9 JUMP JUMPDEST DUP5 DUP11 MSTORE PUSH1 0x9 DUP8 MSTORE DUP9 DUP11 KECCAK256 SLOAD SWAP1 DUP3 DUP12 MSTORE PUSH1 0x8 DUP9 MSTORE DUP10 DUP12 KECCAK256 SWAP2 DUP2 DUP2 SUB PUSH2 0x2DD2 JUMPI JUMPDEST POP DUP6 DUP12 MSTORE PUSH1 0x9 DUP9 MSTORE DUP11 DUP11 DUP2 KECCAK256 SSTORE DUP11 MSTORE DUP7 MSTORE DUP9 DUP9 DUP2 KECCAK256 SSTORE PUSH2 0x2C60 JUMP JUMPDEST DUP2 DUP13 MSTORE DUP3 DUP10 MSTORE DUP11 DUP13 KECCAK256 SLOAD DUP2 DUP14 MSTORE DUP12 DUP14 KECCAK256 DUP2 SWAP1 SSTORE DUP13 MSTORE PUSH1 0x9 DUP10 MSTORE DUP11 DUP13 KECCAK256 SSTORE CODESIZE PUSH2 0x2DB7 JUMP JUMPDEST PUSH2 0x2E2E DUP6 PUSH1 0x0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE JUMP JUMPDEST DUP3 DUP11 MSTORE PUSH1 0x5 DUP8 MSTORE DUP9 DUP11 KECCAK256 PUSH1 0x0 NOT DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x2BB8 JUMP JUMPDEST PUSH2 0x2E4E SWAP1 PUSH2 0x2727 JUMP JUMPDEST DUP3 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x2E90 PUSH2 0x2E7C DUP4 PUSH2 0x296C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 LOG2 CODESIZE PUSH2 0x2B8A JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2EC9 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x24 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x2 PUSH1 0x10 SLOAD EQ PUSH2 0x2F0B JUMPI PUSH1 0x2 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH1 0x4 PUSH1 0x40 MLOAD PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 PUSH2 0x2F7E PUSH2 0x2F70 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH1 0x40 DUP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x228E JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0xE SLOAD PUSH1 0x10 SHR AND DUP1 PUSH2 0x2FCC JUMPI JUMPDEST POP AND PUSH1 0x0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x24 SWAP2 SWAP3 POP PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0xC455279100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x306D JUMPI PUSH1 0x0 SWAP2 PUSH2 0x3032 JUMPI JUMPDEST POP DUP3 AND DUP4 DUP4 AND EQ PUSH2 0x302A JUMPI DUP2 SWAP1 CODESIZE PUSH2 0x2FA9 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3065 JUMPI JUMPDEST DUP2 PUSH2 0x304B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x228E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2A2 JUMPI MLOAD SWAP1 DUP4 DUP3 AND DUP3 SUB PUSH2 0x31E JUMPI POP CODESIZE PUSH2 0x3017 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x303E JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0xFF PUSH1 0xE SLOAD AND DUP1 PUSH2 0x3454 JUMPI JUMPDEST POP PUSH2 0x308F PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP2 DUP4 MSTORE PUSH1 0x4 SWAP3 PUSH1 0x20 SWAP3 DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 SWAP4 DUP4 DUP6 DUP4 KECCAK256 SLOAD AND SWAP8 DUP5 DUP2 AND DUP1 ISZERO ISZERO SWAP1 DUP2 PUSH2 0x3379 JUMPI JUMPDEST POP POP POP DUP8 ISZERO SWAP1 DUP2 ISZERO SWAP5 DUP6 PUSH2 0x3329 JUMPI JUMPDEST DUP2 AND SWAP2 DUP3 ISZERO SWAP1 DUP2 ISZERO PUSH2 0x3313 JUMPI JUMPDEST DUP6 DUP6 MSTORE DUP10 DUP10 MSTORE DUP8 DUP6 KECCAK256 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP6 DUP5 DUP13 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 DUP1 LOG4 ISZERO PUSH2 0x32A7 JUMPI PUSH1 0xA SLOAD DUP6 DUP6 MSTORE PUSH1 0xB DUP10 MSTORE DUP1 DUP9 DUP7 KECCAK256 SSTORE PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x3294 JUMPI PUSH2 0x3178 PUSH2 0x12E9 DUP3 PUSH1 0x1 DUP10 SWAP5 ADD PUSH1 0xA SSTORE PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE JUMPDEST ISZERO PUSH2 0x3243 JUMPI POP POP PUSH1 0xA SLOAD SWAP2 PUSH1 0x0 NOT SWAP3 DUP4 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3230 JUMPI DUP2 DUP4 MSTORE PUSH1 0xB DUP8 MSTORE PUSH2 0x31A8 DUP7 DUP5 KECCAK256 SLOAD SWAP2 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR DUP1 PUSH2 0x31BC PUSH2 0x12E9 DUP5 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE DUP4 MSTORE PUSH1 0xB DUP8 MSTORE DUP6 DUP4 KECCAK256 SSTORE DUP2 MSTORE DUP1 DUP5 DUP2 KECCAK256 SSTORE PUSH1 0xA SLOAD SWAP1 DUP2 ISZERO PUSH2 0x321D JUMPI POP DUP2 ADD SWAP1 PUSH2 0x31E6 DUP3 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH1 0xA SSTORE JUMPDEST PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND ISZERO SWAP1 DUP2 ISZERO PUSH2 0x3215 JUMPI JUMPDEST POP ISZERO PUSH2 0x1391 JUMPI POP POP POP SWAP1 JUMP JUMPDEST SWAP1 POP CODESIZE PUSH2 0x3209 JUMP JUMPDEST DUP1 PUSH1 0x31 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x24 SWAP5 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP4 PUSH1 0x11 DUP11 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 DUP10 SWAP5 SWAP3 SWAP5 SUB PUSH2 0x3257 JUMPI JUMPDEST POP POP POP POP PUSH2 0x31F7 JUMP JUMPDEST PUSH2 0x3260 SWAP1 PUSH2 0x26C9 JUMP JUMPDEST SWAP3 PUSH1 0x0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x3230 JUMPI DUP3 MSTORE PUSH1 0x8 DUP7 MSTORE DUP5 DUP3 KECCAK256 DUP4 DUP4 MSTORE DUP7 MSTORE DUP5 DUP3 KECCAK256 DUP2 SWAP1 SSTORE DUP2 MSTORE PUSH1 0x9 DUP6 MSTORE DUP4 SWAP1 KECCAK256 SSTORE CODESIZE DUP1 DUP1 DUP1 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x24 DUP6 PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST DUP10 DUP4 EQ PUSH2 0x317B JUMPI PUSH2 0x32B7 DUP11 PUSH2 0x26C9 JUMP JUMPDEST DUP6 DUP6 MSTORE PUSH1 0x9 DUP10 MSTORE DUP8 DUP6 KECCAK256 SLOAD SWAP1 DUP12 DUP7 MSTORE PUSH1 0x8 DUP11 MSTORE DUP9 DUP7 KECCAK256 SWAP2 DUP2 DUP2 SUB PUSH2 0x32F1 JUMPI JUMPDEST POP DUP7 DUP7 MSTORE PUSH1 0x9 DUP11 MSTORE DUP6 DUP10 DUP2 KECCAK256 SSTORE DUP6 MSTORE DUP9 MSTORE DUP4 DUP8 DUP2 KECCAK256 SSTORE PUSH2 0x317B JUMP JUMPDEST DUP2 DUP8 MSTORE DUP3 DUP12 MSTORE DUP10 DUP8 KECCAK256 SLOAD DUP2 DUP9 MSTORE DUP1 DUP12 DUP10 KECCAK256 SSTORE DUP8 MSTORE PUSH1 0x9 DUP12 MSTORE DUP10 DUP8 KECCAK256 SSTORE CODESIZE PUSH2 0x32D6 JUMP JUMPDEST DUP4 DUP6 MSTORE PUSH1 0x5 DUP10 MSTORE DUP8 DUP6 KECCAK256 PUSH1 0x1 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x30E7 JUMP JUMPDEST PUSH2 0x3362 DUP6 PUSH1 0x0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE JUMP JUMPDEST DUP10 DUP5 MSTORE PUSH1 0x5 DUP9 MSTORE DUP7 DUP5 KECCAK256 PUSH1 0x0 NOT DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x30DA JUMP JUMPDEST DUP2 PUSH2 0x3412 JUMPI JUMPDEST POP ISZERO PUSH2 0x338C JUMPI DUP1 DUP1 PUSH2 0x30CB JUMP JUMPDEST DUP8 DUP5 DUP8 DUP12 PUSH2 0x33C2 JUMPI PUSH1 0x24 SWAP4 POP MLOAD SWAP2 PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST MLOAD PUSH32 0x177E802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP2 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 SWAP1 PUSH1 0x40 ADD SUB SWAP1 REVERT JUMPDEST DUP11 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x3442 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x342C JUMPI JUMPDEST POP CODESIZE PUSH2 0x337F JUMP JUMPDEST SWAP1 POP DUP5 DUP5 MSTORE PUSH1 0x6 DUP9 MSTORE DUP6 DUP8 DUP6 KECCAK256 SLOAD AND EQ CODESIZE PUSH2 0x3425 JUMP JUMPDEST SWAP1 POP PUSH2 0x344E DUP3 DUP12 PUSH2 0x2F84 JUMP JUMPDEST SWAP1 PUSH2 0x341E JUMP JUMPDEST PUSH2 0x345D SWAP1 PUSH2 0x2727 JUMP JUMPDEST DUP1 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x348B PUSH2 0x2E7C DUP4 PUSH2 0x296C JUMP JUMPDEST SUB SWAP1 LOG2 CODESIZE PUSH2 0x3086 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x0 SWAP2 JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH2 0x34E3 JUMPI PUSH2 0x34AF DUP4 DUP7 PUSH2 0x2667 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34D2 JUMPI POP PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 JUMPDEST SWAP3 ADD SWAP2 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x40 SWAP2 PUSH1 0x1 SWAP4 DUP3 MSTORE PUSH1 0x20 MSTORE KECCAK256 PUSH2 0x34CA JUMP JUMPDEST SWAP2 POP SWAP3 POP EQ SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0xC SLOAD AND PUSH2 0x34F7 JUMPI JUMP JUMPDEST PUSH1 0x4 PUSH1 0x40 MLOAD PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 PUSH1 0x0 SWAP2 PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP1 DUP3 LT ISZERO PUSH2 0x3688 JUMPI JUMPDEST POP PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP1 DUP4 LT ISZERO PUSH2 0x3679 JUMPI JUMPDEST POP PUSH7 0x2386F26FC10000 DUP1 DUP4 LT ISZERO PUSH2 0x366A JUMPI JUMPDEST POP PUSH4 0x5F5E100 DUP1 DUP4 LT ISZERO PUSH2 0x365B JUMPI JUMPDEST POP PUSH2 0x2710 DUP1 DUP4 LT ISZERO PUSH2 0x364C JUMPI JUMPDEST POP PUSH1 0x64 DUP3 LT ISZERO PUSH2 0x363C JUMPI JUMPDEST PUSH1 0xA DUP1 SWAP3 LT ISZERO PUSH2 0x3632 JUMPI JUMPDEST PUSH1 0x1 SWAP1 DUP2 PUSH1 0x21 PUSH1 0x1 DUP7 ADD SWAP6 PUSH1 0x1F NOT PUSH2 0x35D7 PUSH2 0x35C1 DUP10 PUSH2 0x22B1 JUMP JUMPDEST SWAP9 PUSH2 0x35CF PUSH1 0x40 MLOAD SWAP11 DUP12 PUSH2 0x228E JUMP JUMPDEST DUP1 DUP11 MSTORE PUSH2 0x22B1 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP10 ADD CALLDATACOPY DUP7 ADD ADD SWAP1 JUMPDEST PUSH2 0x35EF JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP5 SWAP2 ADD SWAP2 PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP3 DUP3 MOD BYTE DUP4 MSTORE8 DIV SWAP2 DUP3 ISZERO PUSH2 0x362D JUMPI SWAP2 SWAP1 DUP3 PUSH2 0x35E3 JUMP JUMPDEST PUSH2 0x35E8 JUMP JUMPDEST SWAP2 PUSH1 0x1 ADD SWAP2 PUSH2 0x35A7 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x64 PUSH1 0x2 SWAP2 DIV SWAP2 ADD SWAP2 PUSH2 0x359C JUMP JUMPDEST PUSH1 0x4 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x8 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3584 JUMP JUMPDEST PUSH1 0x10 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3575 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3563 JUMP JUMPDEST PUSH1 0x40 SWAP4 POP DUP2 DIV SWAP2 POP CODESIZE PUSH2 0x354A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE 0xAB 0xB3 COINBASE 0xB1 0xDA SWAP16 GASPRICE RETURNDATACOPY 0xB5 SWAP15 NOT 0xE6 ADD GASPRICE 0xB1 COINBASE 0xC8 PUSH23 0xED7CA93C837D378FA90FA1D76664736F6C634300081800 CALLER ",
              "sourceMap": "1147:9399:26:-:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1147:9399:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1446:13:3;1147:9399:26;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;-1:-1:-1;;;;1147:9399:26;;;;;;;;;;;1446:13:3;1147:9399:26;;;;;;;;;1469:17:3;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;-1:-1:-1;;;;1147:9399:26;;;;;;;;;;;;;846:20:28;1147:9399:26;;-1:-1:-1;;;;;;1147:9399:26;;;;;;-1:-1:-1;;;;;1147:9399:26;;;;;;;3423:10;1273:26:0;1269:95;;3004:6;1147:9399:26;;3423:10;-1:-1:-1;;;;;;1147:9399:26;;;;;;;3423:10;;1147:9399;3052:40:0;-1:-1:-1;;3052:40:0;1857:1:17;1147:9399:26;1857:1:17;1147:9399:26;;2964:5;1147:9399;;2964:5;1147:9399;;;;;;;;;3449:29;1147:9399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;3449:29;1147:9399;;3492:21;;3488:89;;1147:9399;3586:17;1147:9399;;;;;;;;;;;;;;;;;;;;1969:3;4131:35:13;;1147:9399:26;-1:-1:-1;;;1147:9399:26;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;-1:-1:-1;1147:9399:26;3488:89;1147:9399;;-1:-1:-1;;;3536:30:26;;;;;1147:9399;;;;;3536:30;1147:9399;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;3449:29;-1:-1:-1;1147:9399:26;;;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;3449:29;1147:9399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;3449:29;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;-1:-1:-1;1147:9399:26;;;;;;;;1269:95:0;1147:9399:26;;-1:-1:-1;;;1322:31:0;;-1:-1:-1;1322:31:0;;;1147:9399:26;;;1322:31:0;1147:9399:26;;;;-1:-1:-1;1147:9399:26;;;;;-1:-1:-1;1147:9399:26;;;;;;;;-1:-1:-1;1147:9399:26;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;1446:13:3;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;;-1:-1:-1;1147:9399:26;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;1446:13:3;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1446:13:3;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;-1:-1:-1;;1147:9399:26;;;-1:-1:-1;;;;;1147:9399:26;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;1147:9399:26;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "abi_decode_address": {
                  "entryPoint": 8646,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_decode_address_28120": {
                  "entryPoint": 8611,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_decode_addresst_addresst_uint256": {
                  "entryPoint": 8730,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 3
                },
                "abi_decode_array_address_dyn_calldata": {
                  "entryPoint": 8681,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_array_uint256_dyn": {
                  "entryPoint": 9004,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_available_length_array_bytes32_dyn": {
                  "entryPoint": 9851,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_decode_string": {
                  "entryPoint": 8909,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_address_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_string": {
                  "entryPoint": 8541,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "array_allocation_size_array_uint256_dyn": {
                  "entryPoint": 8980,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_allocation_size_string": {
                  "entryPoint": 8881,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "checked_add_uint256": {
                  "entryPoint": 9270,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory_with_cleanup": {
                  "entryPoint": 8506,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "external_fun_RESERVES": {
                  "entryPoint": 8578,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 9137,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "finalize_allocation": {
                  "entryPoint": 8846,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "finalize_allocation_43042": {
                  "entryPoint": 8796,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "fun_approve": {
                  "entryPoint": null,
                  "id": 1194,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "fun_balanceOf": {
                  "entryPoint": 9929,
                  "id": 433,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "fun_checkOwner": {
                  "entryPoint": 11021,
                  "id": 84,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "fun_isApprovedForAll": {
                  "entryPoint": 12164,
                  "id": 9730,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "fun_leaf": {
                  "entryPoint": 12085,
                  "id": 9778,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "fun_mint": {
                  "entryPoint": 11102,
                  "id": 924,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "fun_nonReentrantBefore": {
                  "entryPoint": 12026,
                  "id": 2518,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "fun_requireNotPaused": {
                  "entryPoint": 13547,
                  "id": 2423,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "fun_requireOwned": {
                  "entryPoint": 11929,
                  "id": 1260,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "fun_safeTransferFrom": {
                  "entryPoint": 10136,
                  "id": 669,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "fun_toString": {
                  "entryPoint": 13601,
                  "id": 2652,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "fun_tokenURI": {
                  "entryPoint": 10604,
                  "id": 8812,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "fun_transferFrom": {
                  "entryPoint": 9283,
                  "id": 621,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "fun_update": {
                  "entryPoint": 12409,
                  "id": 9656,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "fun_verify": {
                  "entryPoint": 13460,
                  "id": 4009,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "increment_uint256": {
                  "entryPoint": 9100,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "memory_array_index_access_uint256_dyn": {
                  "entryPoint": 9831,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "require_helper_stringliteral": {
                  "entryPoint": 9756,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "require_helper_stringliteral_6bce": {
                  "entryPoint": 9195,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "require_helper_stringliteral_72a5": {
                  "entryPoint": 10023,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "require_helper_stringliteral_833a": {
                  "entryPoint": 9529,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "require_helper_stringliteral_990d": {
                  "entryPoint": 9454,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "require_helper_stringliteral_a64e": {
                  "entryPoint": 9604,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "storage_array_index_access_uint256_dyn": {
                  "entryPoint": 9679,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 2
                },
                "update_byte_slice_dynamic32": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                }
              },
              "generatedSources": [],
              "immutableReferences": {
                "8693": [
                  {
                    "length": 32,
                    "start": 4365
                  },
                  {
                    "length": 32,
                    "start": 5882
                  },
                  {
                    "length": 32,
                    "start": 7728
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714611edd57508163029877b614611e08578163054f7d9c14611de457816306fdde0314611d31578163081812fc14611ce95781630922f9c5146102a6578163095ea7b314611bd45781630c1c972a14611ba7578163163e1e6114611abb57816318160ddd14611a9c5781631a8bd2da146119df57816323b872dd146119c75781632a55205a146119045781632db11544146118095781632f745c591461175457816332cb6b0c146117385781633ccfd60b146116bc5781633f4ba83a1461163957816342842e0e1461161057816342966c68146111ef5781634f6ccce714611181578163501a516214611131578163521eb273146110e057816355f804b314610f445781635a4fee3014610ebb5781635c975abb14610e9757816362a5af3b14610e615781636352211e14610e2457816366fddfa914610ce557816370a0823114610cb8578163715018a614610c385781637ad7614d14610c165781637e4831d314610bef5781638456cb5914610b9457816389cd503a14610b5c5781638da5cb5b14610b2757816395d89b4114610a3d578163a0b3039014610a1e578163a22cb4651461095a578163b44029791461093a578163b6854f96146108e3578163b88d4fde14610890578163bd32fb661461086e578163c4be5b5914610693578163c87b56dd1461065b578163cd85cdb5146105c1578163d0babf38146105a4578163d26ea6c014610539578163d283e3cc146104a7578163d2bc37f814610423578163e985e9c5146103ec578163f2fde38b14610321578163f3993d11146102ab57508063f43a22dc146102a65763fbd9b92d1461028257600080fd5b346102a257816003193601126102a25760209051669536c7089100008152f35b5080fd5b612182565b833461031e57606060031936011261031e576102c56121a3565b916102ce6121c6565b9060443567ffffffffffffffff811161031a576102ed9136910161232c565b825b8151811015610316578061031061030860019385612667565b518588612443565b016102ef565b8380f35b8380fd5b80fd5b9050346103e85760206003193601126103e85761033c6121a3565b90610345612b0d565b73ffffffffffffffffffffffffffffffffffffffff8092169283156103b9575050600f54827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b8280fd5b5050346102a257806003193601126102a25760209061041a61040c6121a3565b6104146121c6565b90612f84565b90519015158152f35b5050346102a257816003193601126102a25761044360ff600e5416612727565b600a549060015b82811115610456578380f35b80807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761049a6104886104a29561296c565b8651918291602080845283019061215d565b0390a261238c565b61044a565b919050346103e857806003193601126103e8576104c26121a3565b602435926fffffffffffffffffffffffffffffffff8416809403610535578361050e575073ffffffffffffffffffffffffffffffffffffffff1683526005602052822090815401905580f35b82517f59171fc1000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b833461031e57602060031936011261031e576105536121a3565b61055b612b0d565b7fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff0000600e549260101b16911617600e5580f35b5050346102a257816003193601126102a257602090516101f48152f35b9050346103e857826003193601126103e8576105db612b0d565b600e549160ff8360081c1661061857836101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff851617600e5580f35b906020606492519162461bcd60e51b8352820152601f60248201527f4552433732314d696e745061757361626c653a204d696e7420706175736564006044820152fd5b82843461031e57602060031936011261031e575061067c61068f923561296c565b905191829160208352602083019061215d565b0390f35b905060606003193601126103e8578035916044359160243567ffffffffffffffff841161086a576106ca61072094369084016121e9565b94906106d4612efa565b6011956106fa606f6106f38a6011546106ee8115156123eb565b612436565b1115612539565b61071b61070f61070986613521565b33612f35565b92600d5492369161267b565b613494565b1561080157338652601360205261073a8584882054612436565b116107bf576618838370f34000908185029185830414851517156107ac5750610764903414612584565b33845260136020528320610779838254612436565b9055825b82811061078d5783600160105580f35b6001906107a661079d845461238c565b80855533612b5e565b0161077d565b856011602492634e487b7160e01b835252fd5b6020606492519162461bcd60e51b8352820152601b60248201527f457863656564732077686974656c69737420616c6c6f77616e636500000000006044820152fd5b506020608492519162461bcd60e51b8352820152602260248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b8580fd5b8390346102a25760206003193601126102a257610889612b0d565b35600d5580f35b8390346102a25760806003193601126102a2576108ab6121a3565b6108b36121c6565b9060643567ffffffffffffffff8111610535576108e0936108d6913691016122cd565b9160443591612798565b80f35b9050346103e85760206003193601126103e8576109347fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720791359261092b60ff600e5416612727565b61067c8461296c565b0390a280f35b833461031e578060031936011261031e57610953612b0d565b80600d5580f35b919050346103e857806003193601126103e8576109756121a3565b90602435918215158093036105355773ffffffffffffffffffffffffffffffffffffffff169283156109f05750338452600760205280842083855260205280842060ff1981541660ff8416179055519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b8360249251917f5b08ba18000000000000000000000000000000000000000000000000000000008352820152fd5b5050346102a257816003193601126102a257602090600d549051908152f35b82843461031e578060031936011261031e578151918282600354610a60816123b1565b9081845260209560019187600182169182600014610b00575050600114610aa4575b50505061068f9291610a9591038561228e565b5192828493845283019061215d565b9190869350600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610ae85750505082010181610a9561068f610a82565b8054848a018601528895508794909301928101610acf565b60ff19168782015293151560051b86019093019350849250610a95915061068f9050610a82565b5050346102a257816003193601126102a25760209073ffffffffffffffffffffffffffffffffffffffff600f54169051908152f35b5050346102a257816003193601126102a25760209073ffffffffffffffffffffffffffffffffffffffff600e5460101c169051908152f35b5050346102a257816003193601126102a25760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610bd2612b0d565b610bda6134eb565b600160ff19600c541617600c5551338152a180f35b5050346102a257816003193601126102a25760209060ff600e5460081c1690519015158152f35b5050346102a257816003193601126102a257602090516618838370f340008152f35b833461031e578060031936011261031e57610c51612b0d565b8073ffffffffffffffffffffffffffffffffffffffff600f547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346102a25760206003193601126102a257602090610cde610cd96121a3565b6126c9565b9051908152f35b839150346102a257826003193601126102a25767ffffffffffffffff813581811161031a57610d1790369084016122cd565b9260243591821161031e5750610d33610d4791369084016121e9565b9190610d3f8533612f35565b92369161267b565b600d54908115610de15790610d5c9291613494565b15610d78575061068f915191829160208352602083019061215d565b608490602084519162461bcd60e51b8352820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152fd5b606484602088519162461bcd60e51b8352820152601d60248201527f57686974656c697374206d65726b6c6520726f6f74206e6f74207365740000006044820152fd5b82843461031e57602060031936011261031e575073ffffffffffffffffffffffffffffffffffffffff610e5960209335612e99565b915191168152f35b833461031e578060031936011261031e57610e7a612b0d565b600160ff19600e54610e8f60ff82161561261c565b1617600e5580f35b5050346102a257816003193601126102a25760209060ff600c541690519015158152f35b833461031e57608060031936011261031e57610ed56121a3565b610edd6121c6565b67ffffffffffffffff9360443585811161053557610efe903690830161232c565b9460643590811161053557610f15913691016122cd565b93835b8151811015610f405780610f3a87610f3260019486612667565b518688612798565b01610f18565b8480f35b833461031e576020806003193601126102a25767ffffffffffffffff90833582811161031a57610f7790369086016122cd565b93610f80612b0d565b610f8f60ff600e54161561261c565b84519283116110cd5750610fa46012546123b1565b601f811161106a575b50602090601f8311600114610fe957508293829392610fde575b50506000198260011b9260031b1c19161760125580f35b015190508380610fc7565b90601f19831694601285527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449285905b878210611052575050836001959610611039575b505050811b0160125580f35b015160001960f88460031b161c1916905583808061102d565b80600185968294968601518155019501930190611019565b601284527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444601f840160051c810191602085106110c3575b601f0160051c01905b8181106110b85750610fad565b8481556001016110ab565b90915081906110a2565b836041602492634e487b7160e01b835252fd5b5050346102a257816003193601126102a2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5050346102a25760606003193601126102a25761114c6121a3565b916044359273ffffffffffffffffffffffffffffffffffffffff91828516850361031e5750602093610e599160243590613079565b9050346103e85760206003193601126103e857803592600a548410156111bb576020836111ad866125cf565b91905490519160031b1c8152f35b604493919251927fa57d13dc0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b919050346103e8576020908160031936011261031a57823560ff600e5416806115bf575b5061121c6134eb565b80855283835273ffffffffffffffffffffffffffffffffffffffff908183872054169133151590816114f9575b505081159182158093816114a9575b8389528787528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558389847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a415611439575050600a54818752600b8552808488205568010000000000000000811015611426576113006112e9826001859401600a556125cf565b81939154906000199060031b92831b921b19161790565b90555b600a54906000199182810190811161141357818852600b865261132985892054916125cf565b90549060031b1c8061133d6112e9846125cf565b90558852600b86528488205586528583812055600a54801561140057810190611365826125cf565b909182549160031b1b19169055600a5560ff600e5460081c16159081156113f8575b5015611391578380f35b60849350519162461bcd60e51b8352820152602760248201527f4552433732314d696e745061757361626c653a204d696e74696e67206973206460448201527f697361626c6564000000000000000000000000000000000000000000000000006064820152fd5b905038611387565b602487603188634e487b7160e01b835252fd5b602488601189634e487b7160e01b835252fd5b602487604188634e487b7160e01b835252fd5b611444575b50611303565b61144d816126c9565b82885260098652848820549188526008865284882091818103611487575b508288526009865287858120558752845285838120553861143e565b81895282875285892054818a5280878b2055895260098752858920553861146b565b6114e284600052600660205260406000207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b828952600587528589206000198154019055611258565b8161157d575b501561150c573880611249565b939250611541579160249251917f7e273289000000000000000000000000000000000000000000000000000000008352820152fd5b517f177e802f00000000000000000000000000000000000000000000000000000000815233918101918252602082019290925281906040010390fd5b338414915081156115ad575b8115611597575b50386114ff565b8288526006865284882054163314905038611590565b90506115b93384612f84565b90611589565b6115c890612727565b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b556572076116076115f68361296c565b85519182918883528883019061215d565b0390a238611213565b5050346102a2576108e0906116243661221a565b919251926116318461225c565b858452612798565b9050346103e857826003193601126103e857611653612b0d565b600c549060ff82161561169557507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9160ff1960209216600c5551338152a180f35b82517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b5050346102a257816003193601126102a2576116d6612b0d565b818080804781811561172f575b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f115611725575080f35b51903d90823e3d90fd5b506108fc6116e3565b5050346102a257816003193601126102a25760209051606f8152f35b82843461031e578160031936011261031e5761176e6121a3565b926024359061177c856126c9565b8210156117b7575090829173ffffffffffffffffffffffffffffffffffffffff60209516825260088552828220908252845220549051908152f35b92517fa57d13dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941692840192835260208301525081906040010390fd5b91905060206003193601126103e857813591611823612efa565b61182f600d54156124ee565b61183d60ff601454166124ee565b601191611857606f6106f3866011546106ee8115156123eb565b60058410156118c15750669536c708910000908184029184830414841517156118ae5750611886903414612584565b825b8281106118985783600160105580f35b6001906118a861079d845461238c565b01611888565b846011602492634e487b7160e01b835252fd5b906020606492519162461bcd60e51b8352820152601b60248201527f45786365656473206d617820706572207472616e73616374696f6e00000000006044820152fd5b82843461031e578160031936011261031e5760243591833582526001602052808220549173ffffffffffffffffffffffffffffffffffffffff8084169360a01c9084156119a9575b506bffffffffffffffffffffffff169384810294818604149015171561199657815173ffffffffffffffffffffffffffffffffffffffff8416815261271085046020820152604090f35b80601186634e487b7160e01b6024945252fd5b8254908116945060a01c90506bffffffffffffffffffffffff61194c565b833461031e576108e06119d93661221a565b91612443565b9050346103e857826003193601126103e8576119f9612b0d565b600e549160ff8360081c1615611a3357837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8416600e5580f35b906020608492519162461bcd60e51b8352820152602360248201527f4552433732314d696e745061757361626c653a204d696e74206e6f742070617560448201527f73656400000000000000000000000000000000000000000000000000000000006064820152fd5b5050346102a257816003193601126102a257602090600a549051908152f35b9050346103e85760206003193601126103e857803567ffffffffffffffff811161031a57611aec90369083016121e9565b91611af5612b0d565b601193606f611b0c856011546106ee8115156123eb565b11611b64575050835b828110611b20578480f35b8060051b8201359073ffffffffffffffffffffffffffffffffffffffff8216820361086a57611b5e600192611b55875461238c565b90818855612b5e565b01611b15565b906020606492519162461bcd60e51b8352820152601260248201527f45786365646573206d617820737570706c7900000000000000000000000000006044820152fd5b833461031e578060031936011261031e57611bc0612b0d565b80600d55600160ff19601454161760145580f35b919050346103e857806003193601126103e857611bef6121a3565b9160243590611bfd82612e99565b9033151580611cc9575b80611cb8575b611c885750819073ffffffffffffffffffffffffffffffffffffffff809516948591167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258780a4835260066020528220907fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b6024908451907fa9fbf51f0000000000000000000000000000000000000000000000000000000082523390820152fd5b50611cc33383612f84565b15611c0d565b503373ffffffffffffffffffffffffffffffffffffffff83161415611c07565b9050346103e85760206003193601126103e8578160209373ffffffffffffffffffffffffffffffffffffffff9235611d2081612e99565b508152600685522054169051908152f35b82843461031e578060031936011261031e578151918282600254611d54816123b1565b9081845260209560019187600182169182600014610b00575050600114611d885750505061068f9291610a9591038561228e565b9190869350600283527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b828410611dcc5750505082010181610a9561068f610a82565b8054848a018601528895508794909301928101611db3565b5050346102a257816003193601126102a25760209060ff600e541690519015158152f35b9050346103e857826003193601126103e857611e22612b0d565b601191601154611e9a5750507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169060015b6005811115611e76578380f35b611e9590611e90611e87845461238c565b80855585612b5e565b61238c565b611e69565b906020606492519162461bcd60e51b8352820152601a60248201527f526573657276657320616c726561647920636f6c6c65637465640000000000006044820152fd5b8491346103e85760206003193601126103e857357fffffffff0000000000000000000000000000000000000000000000000000000081168091036103e857602092507f0e083076000000000000000000000000000000000000000000000000000000008114908115612110575b81156120e6575b81156120bc575b8115612092575b8115612068575b8115611f74575b5015158152f35b7f780e9d6300000000000000000000000000000000000000000000000000000000811491508115611fa7575b5083611f6d565b7f80ac58cd0000000000000000000000000000000000000000000000000000000081149150811561203e575b8115611fe1575b5083611fa0565b7f2a55205a00000000000000000000000000000000000000000000000000000000811491508115612014575b5083611fda565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361200d565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150611fd3565b7f7e4831d30000000000000000000000000000000000000000000000000000000081149150611f66565b7f617605f20000000000000000000000000000000000000000000000000000000081149150611f5f565b7fc64edc390000000000000000000000000000000000000000000000000000000081149150611f58565b7f79f154c40000000000000000000000000000000000000000000000000000000081149150611f51565b7f42966c680000000000000000000000000000000000000000000000000000000081149150611f4a565b60005b83811061214d5750506000910152565b818101518382015260200161213d565b90601f19601f60209361217b8151809281875287808801910161213a565b0116010190565b3461219e57600060031936011261219e57602060405160058152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361219e57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361219e57565b9181601f8401121561219e5782359167ffffffffffffffff831161219e576020808501948460051b01011161219e57565b600319606091011261219e5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361219e5791602435908116810361219e579060443590565b6020810190811067ffffffffffffffff82111761227857604052565b634e487b7160e01b600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff82111761227857604052565b67ffffffffffffffff811161227857601f01601f191660200190565b81601f8201121561219e578035906122e4826122b1565b926122f2604051948561228e565b8284526020838301011161219e57816000926020809301838601378301015290565b67ffffffffffffffff81116122785760051b60200190565b9080601f8301121561219e57602090823561234681612314565b93612354604051958661228e565b81855260208086019260051b82010192831161219e57602001905b82821061237d575050505090565b8135815290830190830161236f565b600019811461239b5760010190565b634e487b7160e01b600052601160045260246000fd5b90600182811c921680156123e1575b60208310146123cb57565b634e487b7160e01b600052602260045260246000fd5b91607f16916123c0565b156123f257565b606460405162461bcd60e51b815260206004820152601660248201527f5265736572766573206e6f742074616b656e20796574000000000000000000006044820152fd5b9190820180921161239b57565b919073ffffffffffffffffffffffffffffffffffffffff90818116156124bd576124708291843391613079565b931692169082820361248157505050565b60649350604051927f64283d7b000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b60246040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152fd5b156124f557565b606460405162461bcd60e51b815260206004820152601660248201527f5075626c69632073616c65206e6f7420616374697665000000000000000000006044820152fd5b1561254057565b606460405162461bcd60e51b815260206004820152601260248201527f45786365656473206d617820737570706c7900000000000000000000000000006044820152fd5b1561258b57565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c69642066756e64732070726f7669646564000000000000000000006044820152fd5b600a5481101561260657600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190600090565b634e487b7160e01b600052603260045260246000fd5b1561262357565b606460405162461bcd60e51b815260206004820152601e60248201527f455243373231467265657a61626c653a205552492069732066726f7a656e00006044820152fd5b80518210156126065760209160051b010190565b929161268682612314565b91612694604051938461228e565b829481845260208094019160051b810192831161219e57905b8282106126ba5750505050565b813581529083019083016126ad565b73ffffffffffffffffffffffffffffffffffffffff1680156126f657600052600560205260406000205490565b60246040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152fd5b1561272e57565b608460405162461bcd60e51b815260206004820152602260248201527f455243373231467265657a61626c653a20555249206973206e6f742066726f7a60448201527f656e0000000000000000000000000000000000000000000000000000000000006064820152fd5b6127a3838383612443565b813b6127b0575b50505050565b73ffffffffffffffffffffffffffffffffffffffff949192939480931693604051937f150b7a02000000000000000000000000000000000000000000000000000000009283865233600487015216602485015260448401526080606484015282612820602096608483019061215d565b039285816000958187895af1849181612914575b506128ac575050503d6000146128a4573d61284e816122b1565b9061285c604051928361228e565b81528091843d92013e5b8051928361289f57602483604051907f64a0ae920000000000000000000000000000000000000000000000000000000082526004820152fd5b019050fd5b506060612866565b9092507fffffffff0000000000000000000000000000000000000000000000000000000091945016036128e35750388080806127aa565b602490604051907f64a0ae920000000000000000000000000000000000000000000000000000000082526004820152fd5b9091508681813d8311612965575b61292c818361228e565b8101031261053557517fffffffff0000000000000000000000000000000000000000000000000000000081168103610535579038612834565b503d612922565b9061297682612e99565b506040519160009260125461298a816123b1565b9283835260209384840192600190600181169081600014612af15750600114612a9a575b50506129be83859697038461228e565b825160009015612a815750916129ee93916129db612a0e94613521565b906040519586935180928686019061213a565b8201612a028251809386808501910161213a565b0103808452018261228e565b805115612a6c576025612a69917f2e6a736f6e000000000000000000000000000000000000000000000000000000936040519482612a55879451809285808801910161213a565b83019182015203600581018452018261228e565b90565b5050604051612a7a8161225c565b6000815290565b935050505060405190612a938261225c565b8152612a0e565b6012600090815297507fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34445b828910612ade575050509482018301946129be836129ae565b8054868a01880152978601978101612ac5565b60ff191685525050151560051b8301840195506129be836129ae565b73ffffffffffffffffffffffffffffffffffffffff600f54163303612b2e57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff8083169283156124bd5760ff600e541680612e45575b50612b936134eb565b6000928084526004946020918683526040948587205416938415948386159687612df5575b818a5260058752888a2060018154019055848a528a8752888a20827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558482847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8d80a415612d875750600a54838952600b865280888a205568010000000000000000811015612d74579083612c5d6112e9846001899601600a556125cf565b90555b03612d26575b50505060ff600e5460081c16158015612d1f575b15612cb75750612c8957505050565b6024935051917f73c6ac6e000000000000000000000000000000000000000000000000000000008352820152fd5b8460849184519162461bcd60e51b8352820152602760248201527f4552433732314d696e745061757361626c653a204d696e74696e67206973206460448201527f697361626c6564000000000000000000000000000000000000000000000000006064820152fd5b5081612c7a565b612d2f906126c9565b916000198301928311612d61578652600883528486208287528352808587205585526009825283852055388080612c66565b60248760118a634e487b7160e01b835252fd5b60248960418c634e487b7160e01b835252fd5b90808214612c6057612d98816126c9565b848a5260098752888a205490828b5260088852898b2091818103612dd2575b50858b52600988528a8a8120558a5286528888812055612c60565b818c528289528a8c2054818d528b8d208190558c52600989528a8c205538612db7565b612e2e85600052600660205260406000207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b828a5260058752888a206000198154019055612bb8565b612e4e90612727565b827fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207612e90612e7c8361296c565b60405191829160208352602083019061215d565b0390a238612b8a565b80600052600460205273ffffffffffffffffffffffffffffffffffffffff60406000205416908115612ec9575090565b602490604051907f7e2732890000000000000000000000000000000000000000000000000000000082526004820152fd5b600260105414612f0b576002601055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b90612f7e612f709160405192839173ffffffffffffffffffffffffffffffffffffffff6020840196168652604080840152606083019061215d565b03601f19810183528261228e565b51902090565b73ffffffffffffffffffffffffffffffffffffffff809181600e5460101c1680612fcc575b501660005260076020526040600020911660005260205260ff6040600020541690565b6024919250602090604051928380927fc455279100000000000000000000000000000000000000000000000000000000825287871660048301525afa90811561306d57600091613032575b5082168383161461302a57819038612fa9565b505050600190565b6020813d602011613065575b8161304b6020938361228e565b810103126102a2575190838216820361031e575038613017565b3d915061303e565b6040513d6000823e3d90fd5b9060ff600e541680613454575b5061308f6134eb565b60009181835260049260209284845273ffffffffffffffffffffffffffffffffffffffff91604093838583205416978481168015159081613379575b50505087159081159485613329575b8116918215908115613313575b858552898952878520847fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905585848c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8880a4156132a757600a54858552600b8952808886205568010000000000000000811015613294576131786112e9826001899401600a556125cf565b90555b15613243575050600a54916000199283810190811161323057818352600b87526131a886842054916125cf565b90549060031b1c806131bc6112e9846125cf565b90558352600b87528583205581528084812055600a5490811561321d57508101906131e6826125cf565b909182549160031b1b19169055600a555b60ff600e5460081c1615908115613215575b50156113915750505090565b905038613209565b80603188634e487b7160e01b6024945252fd5b60248360118a634e487b7160e01b835252fd5b818994929403613257575b505050506131f7565b613260906126c9565b926000198401938411613230578252600886528482208383528652848220819055815260098552839020553880808061324e565b60248560418c634e487b7160e01b835252fd5b89831461317b576132b78a6126c9565b8585526009895287852054908b865260088a52888620918181036132f1575b5086865260098a52858981205585528852838781205561317b565b818752828b5289872054818852808b892055875260098b5289872055386132d6565b83855260058952878520600181540190556130e7565b61336285600052600660205260406000207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b8984526005885286842060001981540190556130da565b81613412575b501561338c5780806130cb565b8784878b6133c2576024935051917f7e273289000000000000000000000000000000000000000000000000000000008352820152fd5b517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316918301918252602082015281906040010390fd5b8a811491508115613442575b811561342c575b503861337f565b9050848452600688528587852054161438613425565b905061344e828b612f84565b9061341e565b61345d90612727565b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761348b612e7c8361296c565b0390a238613086565b929091906000915b84518310156134e3576134af8386612667565b51906000828210156134d25750600052602052600160406000205b92019161349c565b6040916001938252602052206134ca565b915092501490565b60ff600c54166134f757565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000080821015613688575b506d04ee2d6d415b85acef810000000080831015613679575b50662386f26fc100008083101561366a575b506305f5e1008083101561365b575b506127108083101561364c575b50606482101561363c575b600a80921015613632575b6001908160216001860195601f196135d76135c1896122b1565b986135cf6040519a8b61228e565b808a526122b1565b01366020890137860101905b6135ef575b5050505090565b600019849101917f30313233343536373839616263646566000000000000000000000000000000008282061a83530491821561362d579190826135e3565b6135e8565b91600101916135a7565b919060646002910491019161359c565b60049193920491019138613591565b60089193920491019138613584565b60109193920491019138613575565b60209193920491019138613563565b60409350810491503861354a56fea264697066735822122041abb341b1da9f3a3eb59e19e6013ab141c876ed7ca93c837d378fa90fa1d76664736f6c63430008180033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x1FFC9A7 EQ PUSH2 0x1EDD JUMPI POP DUP2 PUSH4 0x29877B6 EQ PUSH2 0x1E08 JUMPI DUP2 PUSH4 0x54F7D9C EQ PUSH2 0x1DE4 JUMPI DUP2 PUSH4 0x6FDDE03 EQ PUSH2 0x1D31 JUMPI DUP2 PUSH4 0x81812FC EQ PUSH2 0x1CE9 JUMPI DUP2 PUSH4 0x922F9C5 EQ PUSH2 0x2A6 JUMPI DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x1BD4 JUMPI DUP2 PUSH4 0xC1C972A EQ PUSH2 0x1BA7 JUMPI DUP2 PUSH4 0x163E1E61 EQ PUSH2 0x1ABB JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x1A9C JUMPI DUP2 PUSH4 0x1A8BD2DA EQ PUSH2 0x19DF JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x19C7 JUMPI DUP2 PUSH4 0x2A55205A EQ PUSH2 0x1904 JUMPI DUP2 PUSH4 0x2DB11544 EQ PUSH2 0x1809 JUMPI DUP2 PUSH4 0x2F745C59 EQ PUSH2 0x1754 JUMPI DUP2 PUSH4 0x32CB6B0C EQ PUSH2 0x1738 JUMPI DUP2 PUSH4 0x3CCFD60B EQ PUSH2 0x16BC JUMPI DUP2 PUSH4 0x3F4BA83A EQ PUSH2 0x1639 JUMPI DUP2 PUSH4 0x42842E0E EQ PUSH2 0x1610 JUMPI DUP2 PUSH4 0x42966C68 EQ PUSH2 0x11EF JUMPI DUP2 PUSH4 0x4F6CCCE7 EQ PUSH2 0x1181 JUMPI DUP2 PUSH4 0x501A5162 EQ PUSH2 0x1131 JUMPI DUP2 PUSH4 0x521EB273 EQ PUSH2 0x10E0 JUMPI DUP2 PUSH4 0x55F804B3 EQ PUSH2 0xF44 JUMPI DUP2 PUSH4 0x5A4FEE30 EQ PUSH2 0xEBB JUMPI DUP2 PUSH4 0x5C975ABB EQ PUSH2 0xE97 JUMPI DUP2 PUSH4 0x62A5AF3B EQ PUSH2 0xE61 JUMPI DUP2 PUSH4 0x6352211E EQ PUSH2 0xE24 JUMPI DUP2 PUSH4 0x66FDDFA9 EQ PUSH2 0xCE5 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0xCB8 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xC38 JUMPI DUP2 PUSH4 0x7AD7614D EQ PUSH2 0xC16 JUMPI DUP2 PUSH4 0x7E4831D3 EQ PUSH2 0xBEF JUMPI DUP2 PUSH4 0x8456CB59 EQ PUSH2 0xB94 JUMPI DUP2 PUSH4 0x89CD503A EQ PUSH2 0xB5C JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0xB27 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0xA3D JUMPI DUP2 PUSH4 0xA0B30390 EQ PUSH2 0xA1E JUMPI DUP2 PUSH4 0xA22CB465 EQ PUSH2 0x95A JUMPI DUP2 PUSH4 0xB4402979 EQ PUSH2 0x93A JUMPI DUP2 PUSH4 0xB6854F96 EQ PUSH2 0x8E3 JUMPI DUP2 PUSH4 0xB88D4FDE EQ PUSH2 0x890 JUMPI DUP2 PUSH4 0xBD32FB66 EQ PUSH2 0x86E JUMPI DUP2 PUSH4 0xC4BE5B59 EQ PUSH2 0x693 JUMPI DUP2 PUSH4 0xC87B56DD EQ PUSH2 0x65B JUMPI DUP2 PUSH4 0xCD85CDB5 EQ PUSH2 0x5C1 JUMPI DUP2 PUSH4 0xD0BABF38 EQ PUSH2 0x5A4 JUMPI DUP2 PUSH4 0xD26EA6C0 EQ PUSH2 0x539 JUMPI DUP2 PUSH4 0xD283E3CC EQ PUSH2 0x4A7 JUMPI DUP2 PUSH4 0xD2BC37F8 EQ PUSH2 0x423 JUMPI DUP2 PUSH4 0xE985E9C5 EQ PUSH2 0x3EC JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0x321 JUMPI DUP2 PUSH4 0xF3993D11 EQ PUSH2 0x2AB JUMPI POP DUP1 PUSH4 0xF43A22DC EQ PUSH2 0x2A6 JUMPI PUSH4 0xFBD9B92D EQ PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH7 0x9536C708910000 DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x2182 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x2C5 PUSH2 0x21A3 JUMP JUMPDEST SWAP2 PUSH2 0x2CE PUSH2 0x21C6 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x31A JUMPI PUSH2 0x2ED SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x232C JUMP JUMPDEST DUP3 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x316 JUMPI DUP1 PUSH2 0x310 PUSH2 0x308 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x2667 JUMP JUMPDEST MLOAD DUP6 DUP9 PUSH2 0x2443 JUMP JUMPDEST ADD PUSH2 0x2EF JUMP JUMPDEST DUP4 DUP1 RETURN JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x33C PUSH2 0x21A3 JUMP JUMPDEST SWAP1 PUSH2 0x345 PUSH2 0x2B0D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x3B9 JUMPI POP POP PUSH1 0xF SLOAD DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND OR PUSH1 0xF SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST SWAP1 DUP5 PUSH1 0x24 SWAP3 MLOAD SWAP2 PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x41A PUSH2 0x40C PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x414 PUSH2 0x21C6 JUMP JUMPDEST SWAP1 PUSH2 0x2F84 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x443 PUSH1 0xFF PUSH1 0xE SLOAD AND PUSH2 0x2727 JUMP JUMPDEST PUSH1 0xA SLOAD SWAP1 PUSH1 0x1 JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x456 JUMPI DUP4 DUP1 RETURN JUMPDEST DUP1 DUP1 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x49A PUSH2 0x488 PUSH2 0x4A2 SWAP6 PUSH2 0x296C JUMP JUMPDEST DUP7 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP1 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x238C JUMP JUMPDEST PUSH2 0x44A JUMP JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x4C2 PUSH2 0x21A3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP1 SWAP5 SUB PUSH2 0x535 JUMPI DUP4 PUSH2 0x50E JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 KECCAK256 SWAP1 DUP2 SLOAD ADD SWAP1 SSTORE DUP1 RETURN JUMPDEST DUP3 MLOAD PUSH32 0x59171FC100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x553 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x55B PUSH2 0x2B0D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FFFF PUSH22 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 PUSH1 0xE SLOAD SWAP3 PUSH1 0x10 SHL AND SWAP2 AND OR PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x1F4 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x5DB PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0xE SLOAD SWAP2 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND PUSH2 0x618 JUMPI DUP4 PUSH2 0x100 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF DUP6 AND OR PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E742070617573656400 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI POP PUSH2 0x67C PUSH2 0x68F SWAP3 CALLDATALOAD PUSH2 0x296C JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x86A JUMPI PUSH2 0x6CA PUSH2 0x720 SWAP5 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x21E9 JUMP JUMPDEST SWAP5 SWAP1 PUSH2 0x6D4 PUSH2 0x2EFA JUMP JUMPDEST PUSH1 0x11 SWAP6 PUSH2 0x6FA PUSH1 0x6F PUSH2 0x6F3 DUP11 PUSH1 0x11 SLOAD PUSH2 0x6EE DUP2 ISZERO ISZERO PUSH2 0x23EB JUMP JUMPDEST PUSH2 0x2436 JUMP JUMPDEST GT ISZERO PUSH2 0x2539 JUMP JUMPDEST PUSH2 0x71B PUSH2 0x70F PUSH2 0x709 DUP7 PUSH2 0x3521 JUMP JUMPDEST CALLER PUSH2 0x2F35 JUMP JUMPDEST SWAP3 PUSH1 0xD SLOAD SWAP3 CALLDATASIZE SWAP2 PUSH2 0x267B JUMP JUMPDEST PUSH2 0x3494 JUMP JUMPDEST ISZERO PUSH2 0x801 JUMPI CALLER DUP7 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE PUSH2 0x73A DUP6 DUP5 DUP9 KECCAK256 SLOAD PUSH2 0x2436 JUMP JUMPDEST GT PUSH2 0x7BF JUMPI PUSH7 0x18838370F34000 SWAP1 DUP2 DUP6 MUL SWAP2 DUP6 DUP4 DIV EQ DUP6 ISZERO OR ISZERO PUSH2 0x7AC JUMPI POP PUSH2 0x764 SWAP1 CALLVALUE EQ PUSH2 0x2584 JUMP JUMPDEST CALLER DUP5 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE DUP4 KECCAK256 PUSH2 0x779 DUP4 DUP3 SLOAD PUSH2 0x2436 JUMP JUMPDEST SWAP1 SSTORE DUP3 JUMPDEST DUP3 DUP2 LT PUSH2 0x78D JUMPI DUP4 PUSH1 0x1 PUSH1 0x10 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x7A6 PUSH2 0x79D DUP5 SLOAD PUSH2 0x238C JUMP JUMPDEST DUP1 DUP6 SSTORE CALLER PUSH2 0x2B5E JUMP JUMPDEST ADD PUSH2 0x77D JUMP JUMPDEST DUP6 PUSH1 0x11 PUSH1 0x24 SWAP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x457863656564732077686974656C69737420616C6C6F77616E63650000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x84 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964204D65726B6C6520547265652070726F6F6620737570706C69 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6564000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x889 PUSH2 0x2B0D JUMP JUMPDEST CALLDATALOAD PUSH1 0xD SSTORE DUP1 RETURN JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x8AB PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x8B3 PUSH2 0x21C6 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x535 JUMPI PUSH2 0x8E0 SWAP4 PUSH2 0x8D6 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x2798 JUMP JUMPDEST DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x934 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 SWAP2 CALLDATALOAD SWAP3 PUSH2 0x92B PUSH1 0xFF PUSH1 0xE SLOAD AND PUSH2 0x2727 JUMP JUMPDEST PUSH2 0x67C DUP5 PUSH2 0x296C JUMP JUMPDEST SUB SWAP1 LOG2 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x953 PUSH2 0x2B0D JUMP JUMPDEST DUP1 PUSH1 0xD SSTORE DUP1 RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x975 PUSH2 0x21A3 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO DUP1 SWAP4 SUB PUSH2 0x535 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 DUP4 ISZERO PUSH2 0x9F0 JUMPI POP CALLER DUP5 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE DUP1 DUP5 KECCAK256 DUP4 DUP6 MSTORE PUSH1 0x20 MSTORE DUP1 DUP5 KECCAK256 PUSH1 0xFF NOT DUP2 SLOAD AND PUSH1 0xFF DUP5 AND OR SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 PUSH1 0x20 CALLER SWAP3 LOG3 DUP1 RETURN JUMPDEST DUP4 PUSH1 0x24 SWAP3 MLOAD SWAP2 PUSH32 0x5B08BA1800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xD SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI DUP2 MLOAD SWAP2 DUP3 DUP3 PUSH1 0x3 SLOAD PUSH2 0xA60 DUP2 PUSH2 0x23B1 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH1 0x0 EQ PUSH2 0xB00 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xAA4 JUMPI JUMPDEST POP POP POP PUSH2 0x68F SWAP3 SWAP2 PUSH2 0xA95 SWAP2 SUB DUP6 PUSH2 0x228E JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SWAP2 SWAP1 DUP7 SWAP4 POP PUSH1 0x3 DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0xAE8 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xA95 PUSH2 0x68F PUSH2 0xA82 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xACF JUMP JUMPDEST PUSH1 0xFF NOT AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0xA95 SWAP2 POP PUSH2 0x68F SWAP1 POP PUSH2 0xA82 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xF SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xE SLOAD PUSH1 0x10 SHR AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 SWAP2 PUSH2 0xBD2 PUSH2 0x2B0D JUMP JUMPDEST PUSH2 0xBDA PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0xC SLOAD AND OR PUSH1 0xC SSTORE MLOAD CALLER DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH7 0x18838370F34000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0xC51 PUSH2 0x2B0D JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xF SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH1 0xF SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xCDE PUSH2 0xCD9 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0x26C9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x2A2 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x31A JUMPI PUSH2 0xD17 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x31E JUMPI POP PUSH2 0xD33 PUSH2 0xD47 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x21E9 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xD3F DUP6 CALLER PUSH2 0x2F35 JUMP JUMPDEST SWAP3 CALLDATASIZE SWAP2 PUSH2 0x267B JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 DUP2 ISZERO PUSH2 0xDE1 JUMPI SWAP1 PUSH2 0xD5C SWAP3 SWAP2 PUSH2 0x3494 JUMP JUMPDEST ISZERO PUSH2 0xD78 JUMPI POP PUSH2 0x68F SWAP2 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST PUSH1 0x84 SWAP1 PUSH1 0x20 DUP5 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964204D65726B6C6520547265652070726F6F6620737570706C69 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x65642E0000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x64 DUP5 PUSH1 0x20 DUP9 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57686974656C697374206D65726B6C6520726F6F74206E6F7420736574000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE59 PUSH1 0x20 SWAP4 CALLDATALOAD PUSH2 0x2E99 JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0xE7A PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0xE SLOAD PUSH2 0xE8F PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x261C JUMP JUMPDEST AND OR PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0xC SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0xED5 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0xEDD PUSH2 0x21C6 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x44 CALLDATALOAD DUP6 DUP2 GT PUSH2 0x535 JUMPI PUSH2 0xEFE SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x232C JUMP JUMPDEST SWAP5 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x535 JUMPI PUSH2 0xF15 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP4 DUP4 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xF40 JUMPI DUP1 PUSH2 0xF3A DUP8 PUSH2 0xF32 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2667 JUMP JUMPDEST MLOAD DUP7 DUP9 PUSH2 0x2798 JUMP JUMPDEST ADD PUSH2 0xF18 JUMP JUMPDEST DUP5 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x31A JUMPI PUSH2 0xF77 SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x22CD JUMP JUMPDEST SWAP4 PUSH2 0xF80 PUSH2 0x2B0D JUMP JUMPDEST PUSH2 0xF8F PUSH1 0xFF PUSH1 0xE SLOAD AND ISZERO PUSH2 0x261C JUMP JUMPDEST DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x10CD JUMPI POP PUSH2 0xFA4 PUSH1 0x12 SLOAD PUSH2 0x23B1 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x106A JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xFE9 JUMPI POP DUP3 SWAP4 DUP3 SWAP4 SWAP3 PUSH2 0xFDE JUMPI JUMPDEST POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x12 SSTORE DUP1 RETURN JUMPDEST ADD MLOAD SWAP1 POP DUP4 DUP1 PUSH2 0xFC7 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP5 PUSH1 0x12 DUP6 MSTORE PUSH32 0xBB8A6A4669BA250D26CD7A459ECA9D215F8307E33AEBE50379BC5A3617EC3444 SWAP3 DUP6 SWAP1 JUMPDEST DUP8 DUP3 LT PUSH2 0x1052 JUMPI POP POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x1039 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x12 SSTORE DUP1 RETURN JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE DUP4 DUP1 DUP1 PUSH2 0x102D JUMP JUMPDEST DUP1 PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x1019 JUMP JUMPDEST PUSH1 0x12 DUP5 MSTORE PUSH32 0xBB8A6A4669BA250D26CD7A459ECA9D215F8307E33AEBE50379BC5A3617EC3444 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP6 LT PUSH2 0x10C3 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x10B8 JUMPI POP PUSH2 0xFAD JUMP JUMPDEST DUP5 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x10AB JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x10A2 JUMP JUMPDEST DUP4 PUSH1 0x41 PUSH1 0x24 SWAP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x114C PUSH2 0x21A3 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP6 AND DUP6 SUB PUSH2 0x31E JUMPI POP PUSH1 0x20 SWAP4 PUSH2 0xE59 SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x3079 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP1 CALLDATALOAD SWAP3 PUSH1 0xA SLOAD DUP5 LT ISZERO PUSH2 0x11BB JUMPI PUSH1 0x20 DUP4 PUSH2 0x11AD DUP7 PUSH2 0x25CF JUMP JUMPDEST SWAP2 SWAP1 SLOAD SWAP1 MLOAD SWAP2 PUSH1 0x3 SHL SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x44 SWAP4 SWAP2 SWAP3 MLOAD SWAP3 PUSH32 0xA57D13DC00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31A JUMPI DUP3 CALLDATALOAD PUSH1 0xFF PUSH1 0xE SLOAD AND DUP1 PUSH2 0x15BF JUMPI JUMPDEST POP PUSH2 0x121C PUSH2 0x34EB JUMP JUMPDEST DUP1 DUP6 MSTORE DUP4 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 DUP8 KECCAK256 SLOAD AND SWAP2 CALLER ISZERO ISZERO SWAP1 DUP2 PUSH2 0x14F9 JUMPI JUMPDEST POP POP DUP2 ISZERO SWAP2 DUP3 ISZERO DUP1 SWAP4 DUP2 PUSH2 0x14A9 JUMPI JUMPDEST DUP4 DUP10 MSTORE DUP8 DUP8 MSTORE DUP6 DUP10 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP4 DUP10 DUP5 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP3 DUP1 LOG4 ISZERO PUSH2 0x1439 JUMPI POP POP PUSH1 0xA SLOAD DUP2 DUP8 MSTORE PUSH1 0xB DUP6 MSTORE DUP1 DUP5 DUP9 KECCAK256 SSTORE PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x1426 JUMPI PUSH2 0x1300 PUSH2 0x12E9 DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH1 0xA SSTORE PUSH2 0x25CF JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH1 0x0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST PUSH1 0xA SLOAD SWAP1 PUSH1 0x0 NOT SWAP2 DUP3 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1413 JUMPI DUP2 DUP9 MSTORE PUSH1 0xB DUP7 MSTORE PUSH2 0x1329 DUP6 DUP10 KECCAK256 SLOAD SWAP2 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR DUP1 PUSH2 0x133D PUSH2 0x12E9 DUP5 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE DUP9 MSTORE PUSH1 0xB DUP7 MSTORE DUP5 DUP9 KECCAK256 SSTORE DUP7 MSTORE DUP6 DUP4 DUP2 KECCAK256 SSTORE PUSH1 0xA SLOAD DUP1 ISZERO PUSH2 0x1400 JUMPI DUP2 ADD SWAP1 PUSH2 0x1365 DUP3 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH1 0xA SSTORE PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND ISZERO SWAP1 DUP2 ISZERO PUSH2 0x13F8 JUMPI JUMPDEST POP ISZERO PUSH2 0x1391 JUMPI DUP4 DUP1 RETURN JUMPDEST PUSH1 0x84 SWAP4 POP MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E74696E672069732064 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x697361626C656400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 POP CODESIZE PUSH2 0x1387 JUMP JUMPDEST PUSH1 0x24 DUP8 PUSH1 0x31 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP9 PUSH1 0x11 DUP10 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP8 PUSH1 0x41 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x1444 JUMPI JUMPDEST POP PUSH2 0x1303 JUMP JUMPDEST PUSH2 0x144D DUP2 PUSH2 0x26C9 JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH1 0x9 DUP7 MSTORE DUP5 DUP9 KECCAK256 SLOAD SWAP2 DUP9 MSTORE PUSH1 0x8 DUP7 MSTORE DUP5 DUP9 KECCAK256 SWAP2 DUP2 DUP2 SUB PUSH2 0x1487 JUMPI JUMPDEST POP DUP3 DUP9 MSTORE PUSH1 0x9 DUP7 MSTORE DUP8 DUP6 DUP2 KECCAK256 SSTORE DUP8 MSTORE DUP5 MSTORE DUP6 DUP4 DUP2 KECCAK256 SSTORE CODESIZE PUSH2 0x143E JUMP JUMPDEST DUP2 DUP10 MSTORE DUP3 DUP8 MSTORE DUP6 DUP10 KECCAK256 SLOAD DUP2 DUP11 MSTORE DUP1 DUP8 DUP12 KECCAK256 SSTORE DUP10 MSTORE PUSH1 0x9 DUP8 MSTORE DUP6 DUP10 KECCAK256 SSTORE CODESIZE PUSH2 0x146B JUMP JUMPDEST PUSH2 0x14E2 DUP5 PUSH1 0x0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE JUMP JUMPDEST DUP3 DUP10 MSTORE PUSH1 0x5 DUP8 MSTORE DUP6 DUP10 KECCAK256 PUSH1 0x0 NOT DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x1258 JUMP JUMPDEST DUP2 PUSH2 0x157D JUMPI JUMPDEST POP ISZERO PUSH2 0x150C JUMPI CODESIZE DUP1 PUSH2 0x1249 JUMP JUMPDEST SWAP4 SWAP3 POP PUSH2 0x1541 JUMPI SWAP2 PUSH1 0x24 SWAP3 MLOAD SWAP2 PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST MLOAD PUSH32 0x177E802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP2 DUP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP2 SWAP1 PUSH1 0x40 ADD SUB SWAP1 REVERT JUMPDEST CALLER DUP5 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x15AD JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1597 JUMPI JUMPDEST POP CODESIZE PUSH2 0x14FF JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH1 0x6 DUP7 MSTORE DUP5 DUP9 KECCAK256 SLOAD AND CALLER EQ SWAP1 POP CODESIZE PUSH2 0x1590 JUMP JUMPDEST SWAP1 POP PUSH2 0x15B9 CALLER DUP5 PUSH2 0x2F84 JUMP JUMPDEST SWAP1 PUSH2 0x1589 JUMP JUMPDEST PUSH2 0x15C8 SWAP1 PUSH2 0x2727 JUMP JUMPDEST DUP1 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x1607 PUSH2 0x15F6 DUP4 PUSH2 0x296C JUMP JUMPDEST DUP6 MLOAD SWAP2 DUP3 SWAP2 DUP9 DUP4 MSTORE DUP9 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 LOG2 CODESIZE PUSH2 0x1213 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI PUSH2 0x8E0 SWAP1 PUSH2 0x1624 CALLDATASIZE PUSH2 0x221A JUMP JUMPDEST SWAP2 SWAP3 MLOAD SWAP3 PUSH2 0x1631 DUP5 PUSH2 0x225C JUMP JUMPDEST DUP6 DUP5 MSTORE PUSH2 0x2798 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x1653 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x1695 JUMPI POP PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA SWAP2 PUSH1 0xFF NOT PUSH1 0x20 SWAP3 AND PUSH1 0xC SSTORE MLOAD CALLER DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST DUP3 MLOAD PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH2 0x16D6 PUSH2 0x2B0D JUMP JUMPDEST DUP2 DUP1 DUP1 DUP1 SELFBALANCE DUP2 DUP2 ISZERO PUSH2 0x172F JUMPI JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 CALL ISZERO PUSH2 0x1725 JUMPI POP DUP1 RETURN JUMPDEST MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH2 0x8FC PUSH2 0x16E3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x6F DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x176E PUSH2 0x21A3 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x177C DUP6 PUSH2 0x26C9 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x17B7 JUMPI POP SWAP1 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 SWAP6 AND DUP3 MSTORE PUSH1 0x8 DUP6 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP3 MLOAD PUSH32 0xA57D13DC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE POP DUP2 SWAP1 PUSH1 0x40 ADD SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x1823 PUSH2 0x2EFA JUMP JUMPDEST PUSH2 0x182F PUSH1 0xD SLOAD ISZERO PUSH2 0x24EE JUMP JUMPDEST PUSH2 0x183D PUSH1 0xFF PUSH1 0x14 SLOAD AND PUSH2 0x24EE JUMP JUMPDEST PUSH1 0x11 SWAP2 PUSH2 0x1857 PUSH1 0x6F PUSH2 0x6F3 DUP7 PUSH1 0x11 SLOAD PUSH2 0x6EE DUP2 ISZERO ISZERO PUSH2 0x23EB JUMP JUMPDEST PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x18C1 JUMPI POP PUSH7 0x9536C708910000 SWAP1 DUP2 DUP5 MUL SWAP2 DUP5 DUP4 DIV EQ DUP5 ISZERO OR ISZERO PUSH2 0x18AE JUMPI POP PUSH2 0x1886 SWAP1 CALLVALUE EQ PUSH2 0x2584 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP2 LT PUSH2 0x1898 JUMPI DUP4 PUSH1 0x1 PUSH1 0x10 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x18A8 PUSH2 0x79D DUP5 SLOAD PUSH2 0x238C JUMP JUMPDEST ADD PUSH2 0x1888 JUMP JUMPDEST DUP5 PUSH1 0x11 PUSH1 0x24 SWAP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45786365656473206D617820706572207472616E73616374696F6E0000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 DUP4 CALLDATALOAD DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 PUSH1 0xA0 SHR SWAP1 DUP5 ISZERO PUSH2 0x19A9 JUMPI JUMPDEST POP PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1996 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP2 MSTORE PUSH2 0x2710 DUP6 DIV PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 SWAP1 RETURN JUMPDEST DUP1 PUSH1 0x11 DUP7 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x24 SWAP5 MSTORE MSTORE REVERT JUMPDEST DUP3 SLOAD SWAP1 DUP2 AND SWAP5 POP PUSH1 0xA0 SHR SWAP1 POP PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x194C JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI PUSH2 0x8E0 PUSH2 0x19D9 CALLDATASIZE PUSH2 0x221A JUMP JUMPDEST SWAP2 PUSH2 0x2443 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x19F9 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0xE SLOAD SWAP2 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO PUSH2 0x1A33 JUMPI DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF DUP5 AND PUSH1 0xE SSTORE DUP1 RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x84 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E74206E6F7420706175 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7365640000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xA SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x31A JUMPI PUSH2 0x1AEC SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x21E9 JUMP JUMPDEST SWAP2 PUSH2 0x1AF5 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x11 SWAP4 PUSH1 0x6F PUSH2 0x1B0C DUP6 PUSH1 0x11 SLOAD PUSH2 0x6EE DUP2 ISZERO ISZERO PUSH2 0x23EB JUMP JUMPDEST GT PUSH2 0x1B64 JUMPI POP POP DUP4 JUMPDEST DUP3 DUP2 LT PUSH2 0x1B20 JUMPI DUP5 DUP1 RETURN JUMPDEST DUP1 PUSH1 0x5 SHL DUP3 ADD CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x86A JUMPI PUSH2 0x1B5E PUSH1 0x1 SWAP3 PUSH2 0x1B55 DUP8 SLOAD PUSH2 0x238C JUMP JUMPDEST SWAP1 DUP2 DUP9 SSTORE PUSH2 0x2B5E JUMP JUMPDEST ADD PUSH2 0x1B15 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45786365646573206D617820737570706C790000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI PUSH2 0x1BC0 PUSH2 0x2B0D JUMP JUMPDEST DUP1 PUSH1 0xD SSTORE PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x14 SLOAD AND OR PUSH1 0x14 SSTORE DUP1 RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x1BEF PUSH2 0x21A3 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1BFD DUP3 PUSH2 0x2E99 JUMP JUMPDEST SWAP1 CALLER ISZERO ISZERO DUP1 PUSH2 0x1CC9 JUMPI JUMPDEST DUP1 PUSH2 0x1CB8 JUMPI JUMPDEST PUSH2 0x1C88 JUMPI POP DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 AND SWAP5 DUP6 SWAP2 AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP8 DUP1 LOG4 DUP4 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP3 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x24 SWAP1 DUP5 MLOAD SWAP1 PUSH32 0xA9FBF51F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER SWAP1 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH2 0x1CC3 CALLER DUP4 PUSH2 0x2F84 JUMP JUMPDEST ISZERO PUSH2 0x1C0D JUMP JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND EQ ISZERO PUSH2 0x1C07 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD PUSH2 0x1D20 DUP2 PUSH2 0x2E99 JUMP JUMPDEST POP DUP2 MSTORE PUSH1 0x6 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x31E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x31E JUMPI DUP2 MLOAD SWAP2 DUP3 DUP3 PUSH1 0x2 SLOAD PUSH2 0x1D54 DUP2 PUSH2 0x23B1 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH1 0x0 EQ PUSH2 0xB00 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1D88 JUMPI POP POP POP PUSH2 0x68F SWAP3 SWAP2 PUSH2 0xA95 SWAP2 SUB DUP6 PUSH2 0x228E JUMP JUMPDEST SWAP2 SWAP1 DUP7 SWAP4 POP PUSH1 0x2 DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE JUMPDEST DUP3 DUP5 LT PUSH2 0x1DCC JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xA95 PUSH2 0x68F PUSH2 0xA82 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1DB3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2A2 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0xE SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x3E8 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI PUSH2 0x1E22 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x11 SWAP2 PUSH1 0x11 SLOAD PUSH2 0x1E9A JUMPI POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1E76 JUMPI DUP4 DUP1 RETURN JUMPDEST PUSH2 0x1E95 SWAP1 PUSH2 0x1E90 PUSH2 0x1E87 DUP5 SLOAD PUSH2 0x238C JUMP JUMPDEST DUP1 DUP6 SSTORE DUP6 PUSH2 0x2B5E JUMP JUMPDEST PUSH2 0x238C JUMP JUMPDEST PUSH2 0x1E69 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x526573657276657320616C726561647920636F6C6C6563746564000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP5 SWAP2 CALLVALUE PUSH2 0x3E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3E8 JUMPI CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x3E8 JUMPI PUSH1 0x20 SWAP3 POP PUSH32 0xE08307600000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP1 DUP2 ISZERO PUSH2 0x2110 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x20E6 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x20BC JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x2092 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x2068 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1F74 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x780E9D6300000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x1FA7 JUMPI JUMPDEST POP DUP4 PUSH2 0x1F6D JUMP JUMPDEST PUSH32 0x80AC58CD00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x203E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1FE1 JUMPI JUMPDEST POP DUP4 PUSH2 0x1FA0 JUMP JUMPDEST PUSH32 0x2A55205A00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x2014 JUMPI JUMPDEST POP DUP4 PUSH2 0x1FDA JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x200D JUMP JUMPDEST PUSH32 0x5B5E139F00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1FD3 JUMP JUMPDEST PUSH32 0x7E4831D300000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F66 JUMP JUMPDEST PUSH32 0x617605F200000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F5F JUMP JUMPDEST PUSH32 0xC64EDC3900000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F58 JUMP JUMPDEST PUSH32 0x79F154C400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F51 JUMP JUMPDEST PUSH32 0x42966C6800000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1F4A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x214D JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x213D JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 SWAP4 PUSH2 0x217B DUP2 MLOAD DUP1 SWAP3 DUP2 DUP8 MSTORE DUP8 DUP1 DUP9 ADD SWAP2 ADD PUSH2 0x213A JUMP JUMPDEST ADD AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x219E JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x219E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x5 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x219E JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x219E JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x219E JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x219E JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x219E JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x219E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x219E JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x219E JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2278 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2278 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2278 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x219E JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x22E4 DUP3 PUSH2 0x22B1 JUMP JUMPDEST SWAP3 PUSH2 0x22F2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x228E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x219E JUMPI DUP2 PUSH1 0x0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2278 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x219E JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x2346 DUP2 PUSH2 0x2314 JUMP JUMPDEST SWAP4 PUSH2 0x2354 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x228E JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x219E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x237D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x236F JUMP JUMPDEST PUSH1 0x0 NOT DUP2 EQ PUSH2 0x239B JUMPI PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x23E1 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x23CB JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x23C0 JUMP JUMPDEST ISZERO PUSH2 0x23F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265736572766573206E6F742074616B656E2079657400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x239B JUMPI JUMP JUMPDEST SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND ISZERO PUSH2 0x24BD JUMPI PUSH2 0x2470 DUP3 SWAP2 DUP5 CALLER SWAP2 PUSH2 0x3079 JUMP JUMPDEST SWAP4 AND SWAP3 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x2481 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x64 SWAP4 POP PUSH1 0x40 MLOAD SWAP3 PUSH32 0x64283D7B00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x24 PUSH1 0x40 MLOAD PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x24F5 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5075626C69632073616C65206E6F742061637469766500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x2540 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45786365656473206D617820737570706C790000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x258B JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642066756E64732070726F766964656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0xA SLOAD DUP2 LT ISZERO PUSH2 0x2606 JUMPI PUSH1 0xA PUSH1 0x0 MSTORE PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 ADD SWAP1 PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ISZERO PUSH2 0x2623 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231467265657A61626C653A205552492069732066726F7A656E0000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2606 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x2686 DUP3 PUSH2 0x2314 JUMP JUMPDEST SWAP2 PUSH2 0x2694 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x228E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 SWAP5 ADD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP3 DUP4 GT PUSH2 0x219E JUMPI SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x26BA JUMPI POP POP POP POP JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x26AD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x26F6 JUMPI PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x24 PUSH1 0x40 MLOAD PUSH32 0x89C62B6400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x272E JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243373231467265657A61626C653A20555249206973206E6F742066726F7A PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH2 0x27A3 DUP4 DUP4 DUP4 PUSH2 0x2443 JUMP JUMPDEST DUP2 EXTCODESIZE PUSH2 0x27B0 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 SWAP2 SWAP3 SWAP4 SWAP5 DUP1 SWAP4 AND SWAP4 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x150B7A0200000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE DUP3 PUSH2 0x2820 PUSH1 0x20 SWAP7 PUSH1 0x84 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP3 DUP6 DUP2 PUSH1 0x0 SWAP6 DUP2 DUP8 DUP10 GAS CALL DUP5 SWAP2 DUP2 PUSH2 0x2914 JUMPI JUMPDEST POP PUSH2 0x28AC JUMPI POP POP POP RETURNDATASIZE PUSH1 0x0 EQ PUSH2 0x28A4 JUMPI RETURNDATASIZE PUSH2 0x284E DUP2 PUSH2 0x22B1 JUMP JUMPDEST SWAP1 PUSH2 0x285C PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x228E JUMP JUMPDEST DUP2 MSTORE DUP1 SWAP2 DUP5 RETURNDATASIZE SWAP3 ADD RETURNDATACOPY JUMPDEST DUP1 MLOAD SWAP3 DUP4 PUSH2 0x289F JUMPI PUSH1 0x24 DUP4 PUSH1 0x40 MLOAD SWAP1 PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST ADD SWAP1 POP REVERT JUMPDEST POP PUSH1 0x60 PUSH2 0x2866 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP2 SWAP5 POP AND SUB PUSH2 0x28E3 JUMPI POP CODESIZE DUP1 DUP1 DUP1 PUSH2 0x27AA JUMP JUMPDEST PUSH1 0x24 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0x64A0AE9200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2965 JUMPI JUMPDEST PUSH2 0x292C DUP2 DUP4 PUSH2 0x228E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x535 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x535 JUMPI SWAP1 CODESIZE PUSH2 0x2834 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2922 JUMP JUMPDEST SWAP1 PUSH2 0x2976 DUP3 PUSH2 0x2E99 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 PUSH1 0x0 SWAP3 PUSH1 0x12 SLOAD PUSH2 0x298A DUP2 PUSH2 0x23B1 JUMP JUMPDEST SWAP3 DUP4 DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP5 ADD SWAP3 PUSH1 0x1 SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 PUSH1 0x0 EQ PUSH2 0x2AF1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x2A9A JUMPI JUMPDEST POP POP PUSH2 0x29BE DUP4 DUP6 SWAP7 SWAP8 SUB DUP5 PUSH2 0x228E JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 SWAP1 ISZERO PUSH2 0x2A81 JUMPI POP SWAP2 PUSH2 0x29EE SWAP4 SWAP2 PUSH2 0x29DB PUSH2 0x2A0E SWAP5 PUSH2 0x3521 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 MLOAD DUP1 SWAP3 DUP7 DUP7 ADD SWAP1 PUSH2 0x213A JUMP JUMPDEST DUP3 ADD PUSH2 0x2A02 DUP3 MLOAD DUP1 SWAP4 DUP7 DUP1 DUP6 ADD SWAP2 ADD PUSH2 0x213A JUMP JUMPDEST ADD SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0x228E JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2A6C JUMPI PUSH1 0x25 PUSH2 0x2A69 SWAP2 PUSH32 0x2E6A736F6E000000000000000000000000000000000000000000000000000000 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP3 PUSH2 0x2A55 DUP8 SWAP5 MLOAD DUP1 SWAP3 DUP6 DUP1 DUP9 ADD SWAP2 ADD PUSH2 0x213A JUMP JUMPDEST DUP4 ADD SWAP2 DUP3 ADD MSTORE SUB PUSH1 0x5 DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x228E JUMP JUMPDEST SWAP1 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x2A7A DUP2 PUSH2 0x225C JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2A93 DUP3 PUSH2 0x225C JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2A0E JUMP JUMPDEST PUSH1 0x12 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP8 POP PUSH32 0xBB8A6A4669BA250D26CD7A459ECA9D215F8307E33AEBE50379BC5A3617EC3444 JUMPDEST DUP3 DUP10 LT PUSH2 0x2ADE JUMPI POP POP POP SWAP5 DUP3 ADD DUP4 ADD SWAP5 PUSH2 0x29BE DUP4 PUSH2 0x29AE JUMP JUMPDEST DUP1 SLOAD DUP7 DUP11 ADD DUP9 ADD MSTORE SWAP8 DUP7 ADD SWAP8 DUP2 ADD PUSH2 0x2AC5 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD DUP5 ADD SWAP6 POP PUSH2 0x29BE DUP4 PUSH2 0x29AE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xF SLOAD AND CALLER SUB PUSH2 0x2B2E JUMPI JUMP JUMPDEST PUSH1 0x24 PUSH1 0x40 MLOAD PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP3 DUP4 ISZERO PUSH2 0x24BD JUMPI PUSH1 0xFF PUSH1 0xE SLOAD AND DUP1 PUSH2 0x2E45 JUMPI JUMPDEST POP PUSH2 0x2B93 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP1 DUP5 MSTORE PUSH1 0x4 SWAP5 PUSH1 0x20 SWAP2 DUP7 DUP4 MSTORE PUSH1 0x40 SWAP5 DUP6 DUP8 KECCAK256 SLOAD AND SWAP4 DUP5 ISZERO SWAP5 DUP4 DUP7 ISZERO SWAP7 DUP8 PUSH2 0x2DF5 JUMPI JUMPDEST DUP2 DUP11 MSTORE PUSH1 0x5 DUP8 MSTORE DUP9 DUP11 KECCAK256 PUSH1 0x1 DUP2 SLOAD ADD SWAP1 SSTORE DUP5 DUP11 MSTORE DUP11 DUP8 MSTORE DUP9 DUP11 KECCAK256 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP5 DUP3 DUP5 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP14 DUP1 LOG4 ISZERO PUSH2 0x2D87 JUMPI POP PUSH1 0xA SLOAD DUP4 DUP10 MSTORE PUSH1 0xB DUP7 MSTORE DUP1 DUP9 DUP11 KECCAK256 SSTORE PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2D74 JUMPI SWAP1 DUP4 PUSH2 0x2C5D PUSH2 0x12E9 DUP5 PUSH1 0x1 DUP10 SWAP7 ADD PUSH1 0xA SSTORE PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SUB PUSH2 0x2D26 JUMPI JUMPDEST POP POP POP PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO PUSH2 0x2D1F JUMPI JUMPDEST ISZERO PUSH2 0x2CB7 JUMPI POP PUSH2 0x2C89 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x24 SWAP4 POP MLOAD SWAP2 PUSH32 0x73C6AC6E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST DUP5 PUSH1 0x84 SWAP2 DUP5 MLOAD SWAP2 PUSH3 0x461BCD PUSH1 0xE5 SHL DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D696E745061757361626C653A204D696E74696E672069732064 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x697361626C656400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST POP DUP2 PUSH2 0x2C7A JUMP JUMPDEST PUSH2 0x2D2F SWAP1 PUSH2 0x26C9 JUMP JUMPDEST SWAP2 PUSH1 0x0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0x2D61 JUMPI DUP7 MSTORE PUSH1 0x8 DUP4 MSTORE DUP5 DUP7 KECCAK256 DUP3 DUP8 MSTORE DUP4 MSTORE DUP1 DUP6 DUP8 KECCAK256 SSTORE DUP6 MSTORE PUSH1 0x9 DUP3 MSTORE DUP4 DUP6 KECCAK256 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x2C66 JUMP JUMPDEST PUSH1 0x24 DUP8 PUSH1 0x11 DUP11 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP10 PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 DUP1 DUP3 EQ PUSH2 0x2C60 JUMPI PUSH2 0x2D98 DUP2 PUSH2 0x26C9 JUMP JUMPDEST DUP5 DUP11 MSTORE PUSH1 0x9 DUP8 MSTORE DUP9 DUP11 KECCAK256 SLOAD SWAP1 DUP3 DUP12 MSTORE PUSH1 0x8 DUP9 MSTORE DUP10 DUP12 KECCAK256 SWAP2 DUP2 DUP2 SUB PUSH2 0x2DD2 JUMPI JUMPDEST POP DUP6 DUP12 MSTORE PUSH1 0x9 DUP9 MSTORE DUP11 DUP11 DUP2 KECCAK256 SSTORE DUP11 MSTORE DUP7 MSTORE DUP9 DUP9 DUP2 KECCAK256 SSTORE PUSH2 0x2C60 JUMP JUMPDEST DUP2 DUP13 MSTORE DUP3 DUP10 MSTORE DUP11 DUP13 KECCAK256 SLOAD DUP2 DUP14 MSTORE DUP12 DUP14 KECCAK256 DUP2 SWAP1 SSTORE DUP13 MSTORE PUSH1 0x9 DUP10 MSTORE DUP11 DUP13 KECCAK256 SSTORE CODESIZE PUSH2 0x2DB7 JUMP JUMPDEST PUSH2 0x2E2E DUP6 PUSH1 0x0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE JUMP JUMPDEST DUP3 DUP11 MSTORE PUSH1 0x5 DUP8 MSTORE DUP9 DUP11 KECCAK256 PUSH1 0x0 NOT DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x2BB8 JUMP JUMPDEST PUSH2 0x2E4E SWAP1 PUSH2 0x2727 JUMP JUMPDEST DUP3 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x2E90 PUSH2 0x2E7C DUP4 PUSH2 0x296C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB SWAP1 LOG2 CODESIZE PUSH2 0x2B8A JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2EC9 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x24 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x2 PUSH1 0x10 SLOAD EQ PUSH2 0x2F0B JUMPI PUSH1 0x2 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH1 0x4 PUSH1 0x40 MLOAD PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 PUSH2 0x2F7E PUSH2 0x2F70 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH1 0x40 DUP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x215D JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x228E JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0xE SLOAD PUSH1 0x10 SHR AND DUP1 PUSH2 0x2FCC JUMPI JUMPDEST POP AND PUSH1 0x0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x24 SWAP2 SWAP3 POP PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0xC455279100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x306D JUMPI PUSH1 0x0 SWAP2 PUSH2 0x3032 JUMPI JUMPDEST POP DUP3 AND DUP4 DUP4 AND EQ PUSH2 0x302A JUMPI DUP2 SWAP1 CODESIZE PUSH2 0x2FA9 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3065 JUMPI JUMPDEST DUP2 PUSH2 0x304B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x228E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2A2 JUMPI MLOAD SWAP1 DUP4 DUP3 AND DUP3 SUB PUSH2 0x31E JUMPI POP CODESIZE PUSH2 0x3017 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x303E JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0xFF PUSH1 0xE SLOAD AND DUP1 PUSH2 0x3454 JUMPI JUMPDEST POP PUSH2 0x308F PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP2 DUP4 MSTORE PUSH1 0x4 SWAP3 PUSH1 0x20 SWAP3 DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 SWAP4 DUP4 DUP6 DUP4 KECCAK256 SLOAD AND SWAP8 DUP5 DUP2 AND DUP1 ISZERO ISZERO SWAP1 DUP2 PUSH2 0x3379 JUMPI JUMPDEST POP POP POP DUP8 ISZERO SWAP1 DUP2 ISZERO SWAP5 DUP6 PUSH2 0x3329 JUMPI JUMPDEST DUP2 AND SWAP2 DUP3 ISZERO SWAP1 DUP2 ISZERO PUSH2 0x3313 JUMPI JUMPDEST DUP6 DUP6 MSTORE DUP10 DUP10 MSTORE DUP8 DUP6 KECCAK256 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP6 DUP5 DUP13 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 DUP1 LOG4 ISZERO PUSH2 0x32A7 JUMPI PUSH1 0xA SLOAD DUP6 DUP6 MSTORE PUSH1 0xB DUP10 MSTORE DUP1 DUP9 DUP7 KECCAK256 SSTORE PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x3294 JUMPI PUSH2 0x3178 PUSH2 0x12E9 DUP3 PUSH1 0x1 DUP10 SWAP5 ADD PUSH1 0xA SSTORE PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE JUMPDEST ISZERO PUSH2 0x3243 JUMPI POP POP PUSH1 0xA SLOAD SWAP2 PUSH1 0x0 NOT SWAP3 DUP4 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3230 JUMPI DUP2 DUP4 MSTORE PUSH1 0xB DUP8 MSTORE PUSH2 0x31A8 DUP7 DUP5 KECCAK256 SLOAD SWAP2 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR DUP1 PUSH2 0x31BC PUSH2 0x12E9 DUP5 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SSTORE DUP4 MSTORE PUSH1 0xB DUP8 MSTORE DUP6 DUP4 KECCAK256 SSTORE DUP2 MSTORE DUP1 DUP5 DUP2 KECCAK256 SSTORE PUSH1 0xA SLOAD SWAP1 DUP2 ISZERO PUSH2 0x321D JUMPI POP DUP2 ADD SWAP1 PUSH2 0x31E6 DUP3 PUSH2 0x25CF JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH1 0xA SSTORE JUMPDEST PUSH1 0xFF PUSH1 0xE SLOAD PUSH1 0x8 SHR AND ISZERO SWAP1 DUP2 ISZERO PUSH2 0x3215 JUMPI JUMPDEST POP ISZERO PUSH2 0x1391 JUMPI POP POP POP SWAP1 JUMP JUMPDEST SWAP1 POP CODESIZE PUSH2 0x3209 JUMP JUMPDEST DUP1 PUSH1 0x31 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x24 SWAP5 MSTORE MSTORE REVERT JUMPDEST PUSH1 0x24 DUP4 PUSH1 0x11 DUP11 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 DUP10 SWAP5 SWAP3 SWAP5 SUB PUSH2 0x3257 JUMPI JUMPDEST POP POP POP POP PUSH2 0x31F7 JUMP JUMPDEST PUSH2 0x3260 SWAP1 PUSH2 0x26C9 JUMP JUMPDEST SWAP3 PUSH1 0x0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x3230 JUMPI DUP3 MSTORE PUSH1 0x8 DUP7 MSTORE DUP5 DUP3 KECCAK256 DUP4 DUP4 MSTORE DUP7 MSTORE DUP5 DUP3 KECCAK256 DUP2 SWAP1 SSTORE DUP2 MSTORE PUSH1 0x9 DUP6 MSTORE DUP4 SWAP1 KECCAK256 SSTORE CODESIZE DUP1 DUP1 DUP1 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x24 DUP6 PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE MSTORE REVERT JUMPDEST DUP10 DUP4 EQ PUSH2 0x317B JUMPI PUSH2 0x32B7 DUP11 PUSH2 0x26C9 JUMP JUMPDEST DUP6 DUP6 MSTORE PUSH1 0x9 DUP10 MSTORE DUP8 DUP6 KECCAK256 SLOAD SWAP1 DUP12 DUP7 MSTORE PUSH1 0x8 DUP11 MSTORE DUP9 DUP7 KECCAK256 SWAP2 DUP2 DUP2 SUB PUSH2 0x32F1 JUMPI JUMPDEST POP DUP7 DUP7 MSTORE PUSH1 0x9 DUP11 MSTORE DUP6 DUP10 DUP2 KECCAK256 SSTORE DUP6 MSTORE DUP9 MSTORE DUP4 DUP8 DUP2 KECCAK256 SSTORE PUSH2 0x317B JUMP JUMPDEST DUP2 DUP8 MSTORE DUP3 DUP12 MSTORE DUP10 DUP8 KECCAK256 SLOAD DUP2 DUP9 MSTORE DUP1 DUP12 DUP10 KECCAK256 SSTORE DUP8 MSTORE PUSH1 0x9 DUP12 MSTORE DUP10 DUP8 KECCAK256 SSTORE CODESIZE PUSH2 0x32D6 JUMP JUMPDEST DUP4 DUP6 MSTORE PUSH1 0x5 DUP10 MSTORE DUP8 DUP6 KECCAK256 PUSH1 0x1 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x30E7 JUMP JUMPDEST PUSH2 0x3362 DUP6 PUSH1 0x0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE JUMP JUMPDEST DUP10 DUP5 MSTORE PUSH1 0x5 DUP9 MSTORE DUP7 DUP5 KECCAK256 PUSH1 0x0 NOT DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x30DA JUMP JUMPDEST DUP2 PUSH2 0x3412 JUMPI JUMPDEST POP ISZERO PUSH2 0x338C JUMPI DUP1 DUP1 PUSH2 0x30CB JUMP JUMPDEST DUP8 DUP5 DUP8 DUP12 PUSH2 0x33C2 JUMPI PUSH1 0x24 SWAP4 POP MLOAD SWAP2 PUSH32 0x7E27328900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE REVERT JUMPDEST MLOAD PUSH32 0x177E802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP2 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 SWAP1 PUSH1 0x40 ADD SUB SWAP1 REVERT JUMPDEST DUP11 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x3442 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x342C JUMPI JUMPDEST POP CODESIZE PUSH2 0x337F JUMP JUMPDEST SWAP1 POP DUP5 DUP5 MSTORE PUSH1 0x6 DUP9 MSTORE DUP6 DUP8 DUP6 KECCAK256 SLOAD AND EQ CODESIZE PUSH2 0x3425 JUMP JUMPDEST SWAP1 POP PUSH2 0x344E DUP3 DUP12 PUSH2 0x2F84 JUMP JUMPDEST SWAP1 PUSH2 0x341E JUMP JUMPDEST PUSH2 0x345D SWAP1 PUSH2 0x2727 JUMP JUMPDEST DUP1 PUSH32 0xA109BA539900BF1B633F956D63C96FC89B814C7287F7AA50A9216D0B55657207 PUSH2 0x348B PUSH2 0x2E7C DUP4 PUSH2 0x296C JUMP JUMPDEST SUB SWAP1 LOG2 CODESIZE PUSH2 0x3086 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x0 SWAP2 JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH2 0x34E3 JUMPI PUSH2 0x34AF DUP4 DUP7 PUSH2 0x2667 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34D2 JUMPI POP PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 JUMPDEST SWAP3 ADD SWAP2 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x40 SWAP2 PUSH1 0x1 SWAP4 DUP3 MSTORE PUSH1 0x20 MSTORE KECCAK256 PUSH2 0x34CA JUMP JUMPDEST SWAP2 POP SWAP3 POP EQ SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0xC SLOAD AND PUSH2 0x34F7 JUMPI JUMP JUMPDEST PUSH1 0x4 PUSH1 0x40 MLOAD PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 PUSH1 0x0 SWAP2 PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP1 DUP3 LT ISZERO PUSH2 0x3688 JUMPI JUMPDEST POP PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP1 DUP4 LT ISZERO PUSH2 0x3679 JUMPI JUMPDEST POP PUSH7 0x2386F26FC10000 DUP1 DUP4 LT ISZERO PUSH2 0x366A JUMPI JUMPDEST POP PUSH4 0x5F5E100 DUP1 DUP4 LT ISZERO PUSH2 0x365B JUMPI JUMPDEST POP PUSH2 0x2710 DUP1 DUP4 LT ISZERO PUSH2 0x364C JUMPI JUMPDEST POP PUSH1 0x64 DUP3 LT ISZERO PUSH2 0x363C JUMPI JUMPDEST PUSH1 0xA DUP1 SWAP3 LT ISZERO PUSH2 0x3632 JUMPI JUMPDEST PUSH1 0x1 SWAP1 DUP2 PUSH1 0x21 PUSH1 0x1 DUP7 ADD SWAP6 PUSH1 0x1F NOT PUSH2 0x35D7 PUSH2 0x35C1 DUP10 PUSH2 0x22B1 JUMP JUMPDEST SWAP9 PUSH2 0x35CF PUSH1 0x40 MLOAD SWAP11 DUP12 PUSH2 0x228E JUMP JUMPDEST DUP1 DUP11 MSTORE PUSH2 0x22B1 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP10 ADD CALLDATACOPY DUP7 ADD ADD SWAP1 JUMPDEST PUSH2 0x35EF JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP5 SWAP2 ADD SWAP2 PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP3 DUP3 MOD BYTE DUP4 MSTORE8 DIV SWAP2 DUP3 ISZERO PUSH2 0x362D JUMPI SWAP2 SWAP1 DUP3 PUSH2 0x35E3 JUMP JUMPDEST PUSH2 0x35E8 JUMP JUMPDEST SWAP2 PUSH1 0x1 ADD SWAP2 PUSH2 0x35A7 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x64 PUSH1 0x2 SWAP2 DIV SWAP2 ADD SWAP2 PUSH2 0x359C JUMP JUMPDEST PUSH1 0x4 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x8 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3584 JUMP JUMPDEST PUSH1 0x10 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3575 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 SWAP3 DIV SWAP2 ADD SWAP2 CODESIZE PUSH2 0x3563 JUMP JUMPDEST PUSH1 0x40 SWAP4 POP DUP2 DIV SWAP2 POP CODESIZE PUSH2 0x354A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE 0xAB 0xB3 COINBASE 0xB1 0xDA SWAP16 GASPRICE RETURNDATACOPY 0xB5 SWAP15 NOT 0xE6 ADD GASPRICE 0xB1 COINBASE 0xC8 PUSH23 0xED7CA93C837D378FA90FA1D76664736F6C634300081800 CALLER ",
              "sourceMap": "1147:9399:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;1863:11;1147:9399;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;561:13:27;598:3;1147:9399:26;;576:20:27;;;;;642:12;;;1147:9399:26;642:12:27;;;:::i;:::-;1147:9399:26;642:12:27;;;:::i;:::-;1147:9399:26;561:13:27;;576:20;;1147:9399:26;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;1500:62:0;;;:::i;:::-;1147:9399:26;;;;2627:22:0;;;2623:91;;1147:9399:26;;3004:6:0;1147:9399:26;;;;;;3004:6:0;1147:9399:26;;3052:40:0;;;;1147:9399:26;;2623:91:0;1147:9399:26;;;;;2672:31:0;;;;;;1147:9399:26;2672:31:0;1147:9399:26;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;9200:40;1147:9399;;:::i;:::-;;;:::i;:::-;9200:40;;:::i;:::-;1147:9399;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;743:55:28;1147:9399:26;941:12:28;1147:9399:26;;743:55:28;:::i;:::-;2140:10:7;1147:9399:26;1296:19:28;1314:1;1317:22;;;;;;;1147:9399:26;;;1341:9:28;1384:17;;1371:40;1147:9399:26;1384:17:28;1341:9;1384:17;;:::i;:::-;1147:9399:26;;;;;;;;;;;;;:::i;:::-;1371:40:28;;;1341:9;:::i;:::-;1296:19;;1147:9399:26;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;;;;;;;;;;7244:10:7;7240:84;;1147:9399:26;;;;;8224:9:3;1147:9399:26;;;;;;;;;;;;7240:84:7;1147:9399:26;;7277:36:7;;;;1147:9399:26;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;1500:62:0;;:::i;:::-;1147:9399:26;;712:45:30;1147:9399:26;;;;;;;;712:45:30;1147:9399:26;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;1969:3;1147:9399;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;943:14:29;1147:9399:26;;;;;;;;;;;;;;;943:14:29;1147:9399:26;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;1158:53:31;1147:9399:26;;;;;;:::i;:::-;2466:103:17;;;;:::i;:::-;6553:8:26;1147:9399;6602:61;2135:3;6610:16;1147:9399;6553:8;1147:9399;6545:47;6553:12;;;6545:47;:::i;:::-;6610:16;:::i;:::-;:30;;6602:61;:::i;:::-;1147:9399;1093:48:31;1113:27;;;:::i;:::-;735:10:14;1093:48:31;:::i;:::-;1147:9399:26;1184:20:31;1147:9399:26;;;;;:::i;:::-;1158:53:31;:::i;:::-;1147:9399:26;;;735:10:14;1147:9399:26;;6785:16;1147:9399;;6785:38;1147:9399;;;;;6785:38;:::i;:::-;:51;1147:9399;;1758:12;1147:9399;;;;;;;;;;;;;;;6920:9;6878:78;6920:9;;6886:43;6878:78;:::i;:::-;735:10:14;1147:9399:26;;6785:16;1147:9399;;;;6966:39;1147:9399;;;6966:39;:::i;:::-;1147:9399;;7020:9;7031;;;;;;1147:9399;;3068:21:17;1147:9399:26;;;7042:3;1147:9399;;7081:10;;1147:9399;;7081:10;:::i;:::-;1147:9399;;;735:10:14;7081::26;:::i;:::-;1147:9399;7020:9;;1147:9399;;6553:8;1147:9399;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;1147:9399:26;739:43:31;1147:9399:26;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;1135:40:28;1147:9399:26;;;743:55:28;1147:9399:26;941:12:28;1147:9399:26;;743:55:28;:::i;:::-;1148:17;;;:::i;1147:9399:26:-;1135:40:28;;;1147:9399:26;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;1147:9399:26;1776:27:31;1147:9399:26;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;15772:22:3;;;15768:91;;735:10:14;;1147:9399:26;;15868:18:3;1147:9399:26;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;15929:41:3;1147:9399:26;735:10:14;15929:41:3;;1147:9399:26;;15768:91:3;1147:9399:26;;;;15817:31:3;;;;;;1147:9399:26;15817:31:3;1147:9399:26;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;615:35:31;1147:9399:26;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;2596:7:3;1147:9399:26;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;2596:7:3;1147:9399:26;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;-1:-1:-1;1147:9399:26;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;1710:6:0;1147:9399:26;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;466:36:30;1147:9399:26;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;2427:20:16;1500:62:0;;;:::i;:::-;1315:72:16;;:::i;:::-;2408:4;-1:-1:-1;;2398:14:16;1147:9399:26;;;2398:14:16;1147:9399:26;;735:10:14;1147:9399:26;;2427:20:16;1147:9399:26;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;943:14:29;1147:9399:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;1758:12;1147:9399;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;1147:9399:26;;3004:6:0;1147:9399:26;;;;3004:6:0;1147:9399:26;;3052:40:0;;;;1147:9399:26;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;1609:10:31;;1603:28;1609:10;;1603:28;:::i;:::-;1147:9399:26;;;;:::i;:::-;1326:20:31;1147:9399:26;1326:25:31;;;1147:9399:26;;1402:53:31;;;;;:::i;:::-;1147:9399:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;2273:22:3;1147:9399:26;;;2273:22:3;:::i;:::-;1147:9399:26;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;1044:4:28;-1:-1:-1;;941:12:28;1147:9399:26;632:52:28;1147:9399:26;;;640:9:28;632:52;:::i;:::-;1147:9399:26;;941:12:28;1147:9399:26;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;1796:7:16;1147:9399:26;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;807:13:27;;844:3;1147:9399:26;;822:20:27;;;;;892:12;906:5;892:12;;1147:9399:26;892:12:27;;;:::i;:::-;1147:9399:26;906:5:27;;;:::i;:::-;1147:9399:26;807:13:27;;822:20;;1147:9399:26;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:0;;;:::i;:::-;632:52:28;1147:9399:26;941:12:28;1147:9399:26;;640:9:28;632:52;:::i;:::-;1147:9399:26;;;;;;;;;3987:29;1147:9399;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;3987:29;1147:9399;;;;;;;-1:-1:-1;1147:9399:26;;;;;;-1:-1:-1;;1147:9399:26;;;3987:29;1147:9399;;;;;;;;;;;;;;;;;;;;;;;;;;;;3987:29;1147:9399;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3987:29;1147:9399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;8422:7;1147:9399;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;4943:32;1147:9399;;;4943:32;;:::i;1147:9399::-;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;2140:10:7;1147:9399:26;2325:22:7;;;2321:101;;1147:9399:26;2438:17:7;;;;:::i;:::-;1147:9399:26;;;;;;;;;;;;2321:101:7;1147:9399:26;;;;;2370:41:7;;;;;;1147:9399:26;;;;;2370:41:7;1147:9399:26;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;941:12:28;1147:9399:26;;1632:59:28;;;1147:9399:26;1315:72:16;;;:::i;:::-;1147:9399:26;;;;;;;;;;;;;;735:10:14;;9058:18:3;;9054:86;;;;1147:9399:26;9184:18:3;;;;;;;9180:256;;;;;1147:9399:26;;;;;;;;;;;;;;;;9600:27:3;;;;;;;2703::7;;;1147:9399:26;;3949:10:7;1147:9399:26;;;;3922:15:7;1147:9399:26;;;;;;;;;;;;;;;;9450:16:3;1147:9399:26;;;3949:10:7;1147:9399:26;;:::i;:::-;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;2699:210:7;6241:10;1147:9399:26;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;6293:15:7;1147:9399:26;;6661:26:7;1147:9399:26;;;;6661:26:7;;:::i;:::-;1147:9399:26;;;;;;6698:22:7;1147:9399:26;6698:22:7;;;:::i;1147:9399:26:-;;;;;6293:15:7;1147:9399:26;;;;;;;;;;;;;6241:10:7;1147:9399:26;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6241:10:7;1147:9399:26;;941:12:28;1147:9399:26;;;;1360:13:29;1147:9399:26;;;1360:35:29;;2699:210:7;1147:9399:26;;;;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;1360:35:29;;;;;;1147:9399:26;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;2699:210:7;2803:106;;2699:210;;;;2803:106;4911:15;;;:::i;:::-;1147:9399:26;;;4957:17:7;1147:9399:26;;;;;;;;;5058:12:7;1147:9399:26;;;;;5180:28:7;;;;5176:325;;2803:106;1147:9399:26;;;;4957:17:7;1147:9399:26;;;;;;;;;;;;;;;;2803:106:7;;;5176:325;1147:9399:26;;;;;;;;;;;;;;;;;;;;4957:17:7;1147:9399:26;;;;;;5176:325:7;;;9180:256:3;9342:5;;1147:9399:26;;15420:15:3;1147:9399:26;;;;;;;;;;;14794:662:3;9342:5;1147:9399:26;;;9391:9:3;1147:9399:26;;;;;-1:-1:-1;;1147:9399:26;;;;;9180:256:3;;9054:86;6539:127;;;9054:86;7216:39;;7212:255;;9054:86;;;;7212:255;7275:19;;-1:-1:-1;1147:9399:26;;;;;;7321:31:3;;;;;;1147:9399:26;7321:31:3;7271:186;1147:9399:26;7398:44:3;;;735:10:14;7398:44:3;;;1147:9399:26;;;;;;;;;;;;;;7398:44:3;;;6539:127;735:10:14;6577:16:3;;;-1:-1:-1;6577:52:3;;;;6539:127;6577:88;;;;6539:127;;;;;6577:88;1147:9399:26;;;6059:15:3;1147:9399:26;;;;;;;735:10:14;6633:32:3;;-1:-1:-1;6577:88:3;;;:52;735:10:14;;9200:40:26;735:10:14;9200:40:26;;:::i;:::-;6577:52:3;;;1632:59:28;743:55;;;:::i;:::-;1148:17;1135:40;1147:9399:26;1148:17:28;;;:::i;:::-;1147:9399:26;;;;;;;;;;;;;:::i;:::-;1135:40:28;;;1632:59;;;1147:9399:26;;;;;;4872:39:3;1147:9399:26;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;4872:39:3;:::i;1147:9399:26:-;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;1796:7:16;1147:9399:26;;;;;2140:9:16;2136:62;;1147:9399:26;2674:22:16;1147:9399:26;-1:-1:-1;;1147:9399:26;;;1796:7:16;1147:9399:26;;735:10:14;1147:9399:26;;2674:22:16;1147:9399:26;;2136:62:16;1147:9399:26;;2172:15:16;;;;1147:9399:26;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;8322:21:26;;;;;8305:39;;;;;1147:9399;;8305:7;1147:9399;8305:39;;;;;1147:9399;;;8305:39;1147:9399;;;;;;;;;8305:39;;;;;1147:9399;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;2135:3;1147:9399;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;;1856:16:7;;;;:::i;:::-;1847:25;;;1843:99;;1147:9399:26;;;;;;;;;;1958:12:7;1147:9399:26;;;;;;;;;;;;;;;;;;1843:99:7;1147:9399:26;;1895:36:7;;;1147:9399:26;;;;1895:36:7;;;1147:9399:26;;;;;;;-1:-1:-1;1147:9399:26;;;;7398:44:3;;;1147:9399:26;;;;;-1:-1:-1;;1147:9399:26;;;;;;;2466:103:17;;;:::i;:::-;7532:60:26;7540:20;1147:9399;7540:25;7532:60;:::i;:::-;7602:50;1147:9399;7610:15;1147:9399;;7602:50;:::i;:::-;7670:8;1147:9399;7719:61;2135:3;7727:16;1147:9399;7670:8;1147:9399;7662:47;7670:12;;;7662:47;:::i;7719:61::-;1646:1;7798:18;;1147:9399;;;1863:11;;1147:9399;;;;;;;;;;;;;;;7897:9;7858:75;7897:9;;7866:40;7858:75;:::i;:::-;7949:9;7960;;;;;;1147:9399;;3068:21:17;1147:9399:26;;;7971:3;1147:9399;;8010:10;;1147:9399;;8010:10;:::i;:::-;1147:9399;7949:9;;1147:9399;;7670:8;1147:9399;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;2726:29:13;;;2722:173;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;2722:173:13;1147:9399:26;;;;;;-1:-1:-1;1147:9399:26;;;-1:-1:-1;1147:9399:26;2722:173:13;;1147:9399:26;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;943:14:29;1147:9399:26;;;;;;;;;;;;;;943:14:29;1147:9399:26;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;2140:10:7;1147:9399:26;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:0;;;:::i;:::-;5667:8:26;1147:9399;2135:3;5773:21;1147:9399;5667:8;1147:9399;5659:47;5667:12;;;5659:47;:::i;5773:21::-;:35;1147:9399;;5846:13;;;5861:14;;;;;;1147:9399;;;5877:3;1147:9399;;;;;;;;;;;;;;5918:10;1147:9399;;5918:10;1147:9399;;5918:10;:::i;:::-;1147:9399;;;;5918:10;:::i;:::-;1147:9399;5846:13;;1147:9399;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;1147:9399:26;1776:27:31;1147:9399:26;7442:4;-1:-1:-1;;7424:22:26;1147:9399;;;7424:22;1147:9399;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::i;:::-;;;;15017:22:3;;;;:::i;:::-;735:10:14;;15167:18:3;;:35;;;1147:9399:26;15167:69:3;;;1147:9399:26;15163:142:3;;1147:9399:26;;;;;;;;;;;15357:28:3;;;;1147:9399:26;;15420:15:3;1147:9399:26;;;;;;;;;;;;;;15163:142:3;1147:9399:26;;;;15263:27:3;;;;735:10:14;15263:27:3;;;1147:9399:26;15263:27:3;15167:69;735:10:14;9200:40:26;735:10:14;9200:40:26;;:::i;:::-;15206:30:3;15167:69;;:35;735:10:14;;1147:9399:26;;;15189:13:3;;15167:35;;1147:9399:26;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;3582:22:3;;;:::i;:::-;;1147:9399:26;;6059:15:3;1147:9399:26;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;2441:5:3;1147:9399:26;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2441:5:3;1147:9399:26;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;941:12:28;1147:9399:26;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;1500:62:0;;:::i;:::-;5427:8:26;1147:9399;5427:8;1147:9399;;;-1:-1:-1;;5541:7:26;1147:9399;;;5498:1;5501:13;1646:1;5501:13;;;;;1147:9399;;;5516:3;;1147:9399;5535:26;5550:10;1147:9399;;5550:10;:::i;:::-;1147:9399;;;5535:26;;:::i;:::-;5516:3;:::i;:::-;5486:13;;1147:9399;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;10158:40;;10173:25;10158:40;;:91;;;;;1147:9399;10158:156;;;;1147:9399;10158:208;;;;1147:9399;10158:272;;;;1147:9399;10158:327;;;;1147:9399;10158:379;;;;1147:9399;;;;;;;10158:379;1575:35:7;1560:50;;;-1:-1:-1;1560:90:7;;;;10158:379:26;;;;;1560:90:7;1712:25:3;1697:40;;;-1:-1:-1;1697:104:3;;;;1560:90:7;1697:156:3;;;;1560:90:7;;;;;1697:156:3;2255:26:13;2240:41;;;-1:-1:-1;2240:81:13;;;;1697:156:3;;;;;2240:81:13;877:25:21;862:40;;;2240:81:13;;;1697:104:3;1768:33;1753:48;;;-1:-1:-1;1697:104:3;;10158:327:26;10449:36;10434:51;;;-1:-1:-1;10158:327:26;;:272;10397:33;10382:48;;;-1:-1:-1;10158:272:26;;:208;10333:33;10318:48;;;-1:-1:-1;10158:208:26;;:156;10280:34;10265:49;;;-1:-1:-1;10158:156:26;;:91;10217:32;10202:47;;;-1:-1:-1;10158:91:26;;1147:9399;;;;;;;;-1:-1:-1;;1147:9399:26;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;1646:1;1147:9399;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1147:9399:26;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1147:9399:26;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;;;;;:::o;:::-;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4142:578:3:-;;;1147:9399:26;;;;;4236:16:3;4232:87;;4943:32:26;735:10:14;;;;4943:32:26;;:::i;:::-;1147:9399;;;;4609:21:3;;;;4605:109;;4142:578;;;:::o;4605:109::-;1147:9399:26;;;;;4653:50:3;;;;;;;1147:9399:26;;;;;;;;;4653:50:3;4232:87;1147:9399:26;;;4275:33:3;;;4250:1;4275:33;;;1147:9399:26;4275:33:3;1147:9399:26;;;;:::o;:::-;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;2140:10:7;1147:9399:26;;;;;;2140:10:7;-1:-1:-1;1147:9399:26;;;;-1:-1:-1;1147:9399:26;:::o;:::-;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;1919:208:3;1147:9399:26;;2005:19:3;;2001:87;;2022:1;1147:9399:26;2104:9:3;1147:9399:26;;;2022:1:3;1147:9399:26;;1919:208:3;:::o;2001:87::-;1147:9399:26;;;2047:30:3;;;2022:1;2047:30;;;1147:9399:26;2047:30:3;1147:9399:26;;;;:::o;:::-;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;4984:233:3;5120:7;;;;;:::i;:::-;1173:14:12;;1169:742;;4984:233:3;;;;;:::o;1169:742:12:-;1147:9399:26;;;;;;;;;;;;;;1211:67:12;;;;735:10:14;1211:67:12;;;1147:9399:26;;;;;;;;;;;;;;;1211:67:12;1147:9399:26;1211:67:12;1147:9399:26;;;;;;:::i;:::-;1211:67:12;1190:1;;;;1211:67;;;;;;;;;;;1169:742;-1:-1:-1;1207:694:12;;1518:383;;;1147:9399:26;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1568:18:12;;;1147:9399:26;;;;1672:39:12;;;;1211:67;1672:39;;1147:9399:26;1672:39:12;1564:323;1758:111;;-1:-1:-1;1758:111:12;1147:9399:26;;;;;1207:694:12;1147:9399:26;;;;;;;;1325:51:12;1321:182;;1207:694;1169:742;;;;;;1321:182;1147:9399:26;;;;1445:39:12;;;;1211:67;1445:39;;1147:9399:26;1445:39:12;1211:67;;;;;;;;;;;;;;;;;:::i;:::-;;;1147:9399:26;;;;;;;;;;;;1211:67:12;;;;;;;;;4139:247:26;;2765:22:3;;;:::i;:::-;;1147:9399:26;;;-1:-1:-1;1147:9399:26;4113:13;1147:9399;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;2849:25:3;:75;;2900:18;;1147:9399:26;2900:18:3;;;1147:9399:26;2900:18:3;;:::i;:::-;1147:9399:26;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;4302:26;:77;;4338:35;;1147:9399;;;;;;;;;;;4338:35;;;;;;1147:9399;;;:::i;:::-;;;;;;;4338:35;1147:9399;4338:35;;;;;;;:::i;:::-;4139:247;:::o;4302:77::-;1147:9399;;;;;;;:::i;:::-;-1:-1:-1;1147:9399:26;;4139:247;:::o;2849:75:3:-;1147:9399:26;;;;;;;;;;;:::i;:::-;;;2849:75:3;;1147:9399:26;4113:13;-1:-1:-1;1147:9399:26;;;-1:-1:-1;;1147:9399:26;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1147:9399:26;;;-1:-1:-1;;1147:9399:26;;;;;;;;;-1:-1:-1;1147:9399:26;;;;1796:162:0;1147:9399:26;1710:6:0;1147:9399:26;;735:10:14;1855:23:0;1851:101;;1796:162::o;1851:101::-;1147:9399:26;;;1901:40:0;;;735:10:14;1901:40:0;;;1147:9399:26;1901:40:0;9978:327:3;;1147:9399:26;;;;10045:16:3;;;10041:87;;1147:9399:26;941:12:28;1147:9399:26;;1632:59:28;;;9978:327:3;1315:72:16;;;:::i;:::-;-1:-1:-1;1147:9399:26;;;;5824:7:3;1147:9399:26;;;;;;;;;;;;;9184:18:3;;;;;;;9180:256;;;;9978:327;1147:9399:26;;;9510:9:3;1147:9399:26;;;;;9450:16:3;1147:9399:26;;;;;;;;;;;;;;;;;;;;;;9600:27:3;;;;;;;2703::7;;;1147:9399:26;3949:10:7;1147:9399:26;;;;3922:15:7;1147:9399:26;;;;;;;;;;;;;;;;;;9450:16:3;1147:9399:26;;;3949:10:7;1147:9399:26;;:::i;:::-;;;2699:210:7;3020:19;3016:90;;2699:210;1147:9399:26;;;;941:12:28;1147:9399:26;;;;1360:13:29;1147:9399:26;;1360:35:29;;2699:210:7;1147:9399:26;;;10203:96:3;;;9978:327;;;:::o;10203:96::-;1147:9399:26;;;;10257:31:3;;;;;;1147:9399:26;10257:31:3;1147:9399:26;;;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;;;;;;;;;;;;1360:35:29;;;;;3016:90:7;3538:13;;;:::i;:::-;1147:9399:26;-1:-1:-1;;1147:9399:26;;;;;;;;;3565:12:7;1147:9399:26;;;;;;;;;;;;;;;;;3609:17:7;1147:9399:26;;;;;;3016:90:7;;;;;1147:9399:26;;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;2699:210:7;2807:19;2803:106;;;2699:210;2803:106;4911:15;;;:::i;:::-;1147:9399:26;;;4957:17:7;1147:9399:26;;;;;;;;;;5058:12:7;1147:9399:26;;;;;5180:28:7;;;;5176:325;;2803:106;1147:9399:26;;;;4957:17:7;1147:9399:26;;;;;;;;;;;;;;;;2699:210:7;;5176:325;1147:9399:26;;;;;;;;;;;;;;;;;;;;;4957:17:7;1147:9399:26;;;;;;5176:325:7;;;9180:256:3;9342:5;;1147:9399:26;;15420:15:3;1147:9399:26;;;;;;;;;;;14794:662:3;9342:5;1147:9399:26;;;9391:9:3;1147:9399:26;;;;;-1:-1:-1;;1147:9399:26;;;;;9180:256:3;;1632:59:28;743:55;;;:::i;:::-;1148:17;1135:40;1147:9399:26;1148:17:28;;;:::i;:::-;1147:9399:26;;;;;;;;;;;;;:::i;:::-;1135:40:28;;;1632:59;;;16212:241:3;1147:9399:26;-1:-1:-1;1147:9399:26;5824:7:3;1147:9399:26;;;;-1:-1:-1;1147:9399:26;;;16341:19:3;;;16337:88;;16434:12;16212:241;:::o;16337:88::-;1147:9399:26;;;;16383:31:3;;;;5824:7;16383:31;;1147:9399:26;16383:31:3;2575:307:17;1899:1;2702:7;1147:9399:26;2702:18:17;2698:86;;1899:1;2702:7;1147:9399:26;2575:307:17:o;2698:86::-;2743:30;1147:9399:26;;2743:30:17;;;;795:154:31;;911:30;1147:9399:26;795:154:31;1147:9399:26;;911:30:31;;;1147:9399:26;911:30:31;;;1147:9399:26;;;;;;;;;;;;;;:::i;:::-;911:30:31;-1:-1:-1;;911:30:31;;;;;;:::i;:::-;1147:9399:26;901:41:31;;795:154;:::o;770:436:30:-;1147:9399:26;;;;888:21:30;1147:9399:26;;;;888:35:30;884:259;;770:436;1147:9399:26;;-1:-1:-1;1147:9399:26;4038:18:3;1147:9399:26;;;-1:-1:-1;1147:9399:26;;;-1:-1:-1;1147:9399:26;;;;;-1:-1:-1;1147:9399:26;;;770:436:30;:::o;884:259::-;1147:9399:26;;;;1045:29:30;1147:9399:26;;;1045:29:30;;;;1147:9399:26;1045:29:30;;1147:9399:26;;;1045:29:30;;;1147:9399:26;1045:29:30;;;;;;;-1:-1:-1;1045:29:30;;;884:259;-1:-1:-1;1147:9399:26;;;;;1037:50:30;1033:100;;884:259;;;;;1033:100;1107:11;;;1114:4;1107:11;:::o;1045:29::-;;;;;;;;;;;;;;;:::i;:::-;;;1147:9399:26;;;;;;;;;;;;;1045:29:30;;;;;;;-1:-1:-1;1045:29:30;;;1147:9399:26;;;-1:-1:-1;1147:9399:26;;;;;1172:296:29;;1147:9399:26;941:12:28;1147:9399:26;;1632:59:28;;;1172:296:29;1315:72:16;;;:::i;:::-;-1:-1:-1;1147:9399:26;;;;5824:7:3;1147:9399:26;;;;;;;;;;;;;;;;;;;;9058:18:3;;;9054:86;;;;1172:296:29;9184:18:3;;;;;;;;9180:256;;;;1172:296:29;1147:9399:26;;9450:16:3;;;;;;9446:107;;1172:296:29;1147:9399:26;;;;;;;;;;;;;;;;;9600:27:3;;;;;;;2703::7;;;3949:10;1147:9399:26;;;;3922:15:7;1147:9399:26;;;;;;;;;;;;;;;;;;;;3949:10:7;1147:9399:26;;:::i;:::-;;;2699:210:7;2922:16;;;1147:9399:26;;6241:10:7;1147:9399:26;;-1:-1:-1;;1147:9399:26;;;;;;;;;;;;6293:15:7;1147:9399:26;;6661:26:7;1147:9399:26;;;;6661:26:7;;:::i;:::-;1147:9399:26;;;;;;6698:22:7;1147:9399:26;6698:22:7;;;:::i;1147:9399:26:-;;;;;6293:15:7;1147:9399:26;;;;;;;;;;;;;6241:10:7;1147:9399:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6241:10:7;1147:9399:26;2918:188:7;1147:9399:26;941:12:28;1147:9399:26;;;;1360:13:29;1147:9399:26;;;1360:35:29;;2918:188:7;1147:9399:26;;;;1450:11:29;;;1172:296;:::o;1360:35::-;;;;;;1147:9399:26;;;;-1:-1:-1;;;1147:9399:26;;;;;;;;;;-1:-1:-1;;;1147:9399:26;;;;2918:188:7;3020:19;;;;;;3016:90;;2918:188;;;;;;;3016:90;3538:13;;;:::i;:::-;1147:9399:26;-1:-1:-1;;1147:9399:26;;;;;;;;;3565:12:7;1147:9399:26;;;;;;;;;;;;;;;;;;3609:17:7;1147:9399:26;;;;;;3016:90:7;;;;;;1147:9399:26;;;;;-1:-1:-1;;;1147:9399:26;;;;2699:210:7;2803:106;;;2699:210;2803:106;4911:15;;;:::i;:::-;1147:9399:26;;;4957:17:7;1147:9399:26;;;;;;;;;;5058:12:7;1147:9399:26;;;;;5180:28:7;;;;5176:325;;2803:106;1147:9399:26;;;;4957:17:7;1147:9399:26;;;;;;;;;;;;;;;;2699:210:7;;5176:325;1147:9399:26;;;;;;;;;;;;;;;;;;;;4957:17:7;1147:9399:26;;;;;;5176:325:7;;;9446:107:3;1147:9399:26;;;9510:9:3;1147:9399:26;;;;;9527:1:3;1147:9399:26;;;;;9446:107:3;;9180:256;9342:5;;1147:9399:26;;15420:15:3;1147:9399:26;;;;;;;;;;;14794:662:3;9342:5;1147:9399:26;;;9391:9:3;1147:9399:26;;;;;-1:-1:-1;;1147:9399:26;;;;;9180:256:3;;9054:86;6539:127;;;9054:86;7216:39;;7212:255;;9054:86;;;;7212:255;7275:19;;;;1147:9399:26;;;;;;7321:31:3;;;;;;1147:9399:26;7321:31:3;7271:186;1147:9399:26;7398:44:3;;;1147:9399:26;;;;7398:44:3;;;1147:9399:26;;;;;;;;;;;7398:44:3;;;6539:127;6577:16;;;;-1:-1:-1;6577:52:3;;;;6539:127;6577:88;;;;6539:127;;;;;6577:88;1147:9399:26;;;;;6059:15:3;1147:9399:26;;;;;;;;6633:32:3;6577:88;;;:52;9200:40:26;;;;;;:::i;:::-;6577:52:3;;;1632:59:28;743:55;;;:::i;:::-;1148:17;1135:40;1147:9399:26;1148:17:28;;;:::i;1147:9399:26:-;1135:40:28;;;1632:59;;;1902:154:20;;;;2601:13;-1:-1:-1;2596:134:20;2634:3;1147:9399:26;;2616:16:20;;;;;2710:8;;;;:::i;:::-;1147:9399:26;;-1:-1:-1;605:5:19;;;;;;889:135;-1:-1:-1;889:135:19;;;1147:9399:26;889:135:19;-1:-1:-1;889:135:19;605:59;2634:3:20;1147:9399:26;2601:13:20;;;605:59:19;889:135;;1147:9399:26;889:135:19;;;;;;605:59;;2616:16:20;;;;;2016:33;1902:154;:::o;1878:128:16:-;1147:9399:26;1796:7:16;1147:9399:26;;1939:61:16;;1878:128::o;1939:61::-;1974:15;1147:9399:26;;1974:15:16;;;;1308:632:18;1430:17;-1:-1:-1;29291:8:23;;29282:17;;;;29278:103;;1308:632:18;29407:8:23;;29398:17;;;;29394:103;;1308:632:18;29523:8:23;;29514:17;;;;29510:103;;1308:632:18;29639:7:23;;29630:16;;;;29626:100;;1308:632:18;29752:7:23;;29743:16;;;;29739:100;;1308:632:18;29856:16:23;29865:7;29856:16;;;29852:100;;1308:632:18;29978:7:23;;29969:16;;;29965:66;;1308:632:18;1450:1;1147:9399:26;;1545:92:18;1450:1;1147:9399:26;;;-1:-1:-1;;1147:9399:26;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;1545:92:18;;;1650:247;1450:1;;;1650:247;1910:13;;;;1308:632;:::o;1650:247::-;-1:-1:-1;;1147:9399:26;;;1704:111:18;;;;;;;;1147:9399:26;1865:10:18;;;1861:21;;1650:247;;;;;1861:21;1877:5;;29965:66:23;1147:9399:26;30015:1:23;1147:9399:26;29965:66:23;;;29852:100;1147:9399:26;;29865:7:23;29936:1;1147:9399:26;;;;29852:100:23;;;29739;29823:1;1147:9399:26;;;;;;29739:100:23;;;;29626;29710:1;1147:9399:26;;;;;;29626:100:23;;;;29510:103;29596:2;1147:9399:26;;;;;;29510:103:23;;;;29394;29480:2;1147:9399:26;;;;;;29394:103:23;;;;29278;29364:2;;-1:-1:-1;1147:9399:26;;;-1:-1:-1;29278:103:23;;"
            },
            "methodIdentifiers": {
              "MAX_PER_TX()": "f43a22dc",
              "MAX_SUPPLY()": "32cb6b0c",
              "PRICE_IN_WEI_PUBLIC()": "fbd9b92d",
              "PRICE_IN_WEI_WHITELIST()": "7ad7614d",
              "RESERVES()": "0922f9c5",
              "ROYALTIES_IN_BASIS_POINTS()": "d0babf38",
              "_proxyRegistryAddress()": "89cd503a",
              "_whitelistMerkleRoot()": "a0b30390",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "batchSafeTransferFrom(address,address,uint256[],bytes)": "5a4fee30",
              "batchTransferFrom(address,address,uint256[])": "f3993d11",
              "burn(uint256)": "42966c68",
              "collectReserves()": "029877b6",
              "disableWhitelistMerkleRoot()": "b4402979",
              "freeze()": "62a5af3b",
              "freezeAllTokens()": "d2bc37f8",
              "freezeToken(uint256)": "b6854f96",
              "frozen()": "054f7d9c",
              "getAllowance(string,bytes32[])": "66fddfa9",
              "getApproved(uint256)": "081812fc",
              "gift(address[])": "163e1e61",
              "increaseBalance(address,uint128)": "d283e3cc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "mintPaused()": "7e4831d3",
              "name()": "06fdde03",
              "owner()": "8da5cb5b",
              "ownerOf(uint256)": "6352211e",
              "pause()": "8456cb59",
              "pauseMint()": "cd85cdb5",
              "paused()": "5c975abb",
              "publicMint(uint256)": "2db11544",
              "renounceOwnership()": "715018a6",
              "royaltyInfo(uint256,uint256)": "2a55205a",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "setBaseURI(string)": "55f804b3",
              "setProxyRegistryAddress(address)": "d26ea6c0",
              "setWhitelistMerkleRoot(bytes32)": "bd32fb66",
              "startPublicSale()": "0c1c972a",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenByIndex(uint256)": "4f6ccce7",
              "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferOwnership(address)": "f2fde38b",
              "unpause()": "3f4ba83a",
              "unpauseMint()": "1a8bd2da",
              "update(address,uint256,address)": "501a5162",
              "wallet()": "521eb273",
              "whitelistMint(uint256,uint256,bytes32[])": "c4be5b59",
              "withdraw()": "3ccfd60b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseTokenURI_\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"proxyRegistryAddress_\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"wallet_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidDefaultRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidDefaultRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidTokenRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidTokenRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC721EnumerableForbiddenBatchMint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"ERC721OutOfBoundsIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MintPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MintUnpaused\",\"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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"PermanentURI\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_PER_TX\",\"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\":[],\"name\":\"PRICE_IN_WEI_PUBLIC\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_IN_WEI_WHITELIST\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROYALTIES_IN_BASIS_POINTS\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_proxyRegistryAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_whitelistMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data_\",\"type\":\"bytes\"}],\"name\":\"batchSafeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableWhitelistMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeze\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freezeAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"freezeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"frozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"allowance\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"getAllowance\",\"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\":\"recipients_\",\"type\":\"address[]\"}],\"name\":\"gift\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"increaseBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"publicMint\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\":\"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\":\"baseTokenURI_\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proxyRegistryAddress_\",\"type\":\"address\"}],\"name\":\"setProxyRegistryAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"whitelistMerkleRoot_\",\"type\":\"bytes32\"}],\"name\":\"setWhitelistMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPublicSale\",\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"auth\",\"type\":\"address\"}],\"name\":\"update\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"whitelistMint\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC2981InvalidDefaultRoyalty(uint256,uint256)\":[{\"details\":\"The default royalty set is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidDefaultRoyaltyReceiver(address)\":[{\"details\":\"The default royalty receiver is invalid.\"}],\"ERC2981InvalidTokenRoyalty(uint256,uint256,uint256)\":[{\"details\":\"The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidTokenRoyaltyReceiver(uint256,address)\":[{\"details\":\"The royalty receiver for `tokenId` is invalid.\"}],\"ERC721EnumerableForbiddenBatchMint()\":[{\"details\":\"Batch mint is not allowed.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721OutOfBoundsIndex(address,uint256)\":[{\"details\":\"An `owner`'s token query was out of bounds for `index`. NOTE: The owner being `address(0)` indicates a global out of bounds index.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"ZeroAddressNotAllowed(address)\":[{\"details\":\"Error thrown when a zero address is provided where it's not allowed\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"royaltyInfo(uint256,uint256)\":{\"details\":\"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/MetaDog.sol\":\"MetaDog\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/interfaces/IERC2981.sol\":{\"keccak256\":\"0x3b017a19c1730050d0fdff8dfa9255741634699aa4217442724746ca49e13292\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05530a2959e8be01cd88993970924cd6081c3462395f6fc0e73c034519259b05\",\"dweb:/ipfs/QmXAG8dF9fiYE8iVWJYWxmbEMNL6RvBAxzRGq2nyLanB2M\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol\":{\"keccak256\":\"0xdee1ff07172e443c6600581fc4f11e7830a6d33e4e551752935b835d52a09404\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c503b5573ecd8d18157903b6760e02e8f86b47238c997d6dd04b99df74ef532d\",\"dweb:/ipfs/QmSGcRgfe18dtR4t3erYBSq3W6tPGXHPZ3JKkD1yFJsNsm\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00\",\"dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol\":{\"keccak256\":\"0xc99d280642a1590b7a9a65220b4a606576ad1f51f2773b997eff3d340501c44b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0aebdcae05832b3253bedd5575458fa4b9abca6a203966d72690e62efe98890\",\"dweb:/ipfs/QmbeFZ6X7VksJmRqncuas8cjsYGXPN8FBYtV9PGmpmup8f\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol\":{\"keccak256\":\"0x6931eb56297ef01d684f2b24b36f67949a8754ee753789d71b425be2dec8cf8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b67cd3c0f0dc7c3d8326321dbf9a80b92a85d0efe37d234d137d87e61af1fd0\",\"dweb:/ipfs/Qmbh2jmGvFJECA4RkTiQDjAMsRcw7vJEgQBFRrA3BXC5ij\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/token/common/ERC2981.sol\":{\"keccak256\":\"0xbc10927da9f47d87e6cd46a3218526b7718716a717d07722791eb7de6befc2a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d838bc5e79732a20acc5578a4fa0dd88ba484c906346ad4daea2654ecb922a94\",\"dweb:/ipfs/QmaXqkJiniK3xSi5MEaCrYnFDa9AXd6FvByHMMKaWEEEK7\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11\",\"dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe\"]},\"@openzeppelin/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0x36a0c409c437a753cac9b92b75f93b0fbe92803bf2c8ff1517e54b247f166134\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f91ba472de411aa557cdbf6560c40750d87bd11c9060bc04d2ba7119af9d5a6\",\"dweb:/ipfs/QmQjtYo2i7dDvzCEzZ67bDoNSG4RrwMoxPWuqFmX5Xzpuw\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/MetaDog.sol\":{\"keccak256\":\"0x4bba82ccca788789b27503abc1fa58dde2e25c740f369c0df15b79f45513b416\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://f8e5d4a7367d6ddaf706195b79586cb99dea17a9d039755238ce55a06353f6e1\",\"dweb:/ipfs/Qmbf8dfCQ9MWtPS9RzTpGzJEnCcz1S2Ej8AxG3sL5eyZh3\"]},\"contracts/extensions/ERC721Batch.sol\":{\"keccak256\":\"0x8ba70d6a50e0e6335deab1cccc330ccb5a2d9492b2ca77036c4ba258720593c7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://340301018886f7cb167425b6d4acd6d0adeebaad799c61fedb86531c39df75ff\",\"dweb:/ipfs/QmWj1Pgvc8sMeKHXD3SqmJ2dTmiFB7vAjCmMBGrJrn5vjh\"]},\"contracts/extensions/ERC721Freezable.sol\":{\"keccak256\":\"0xb1ec1653e934e10389a34b0ffe3c79a3063581b154a42f598ab7326c35875032\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f50ea1cb071f97dff88c9fb5381040c37f5622768c1de0a64f5cc06ad0467828\",\"dweb:/ipfs/QmeZfnPxQPXwfNDWVXB6evFSFxmNKhNssGPWJKW7PDbcH7\"]},\"contracts/extensions/ERC721MintPausable.sol\":{\"keccak256\":\"0x9fdefa84aafd8fa10e976ede921229f219a3559d59883ef984981f1dc06a52e2\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://291762a7ff5d28d39be7199a195fffc7926201921105b9a06b68b9c546229846\",\"dweb:/ipfs/QmX1AVcsVSqz9VCrNVVSh5DgHBrxnu7LspbYiYjZvHEmEL\"]},\"contracts/extensions/ERC721OpenSeaGassLess.sol\":{\"keccak256\":\"0x6a3c225bdca6720c52e579355a380d97549614f865df519c79e15b340c71d5a7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://91e2a5a3ddf450c9e521b7cc9595634b1f66d08b23894e40f3b9cdbe535b2b4c\",\"dweb:/ipfs/QmNa4ieaK4a8rQCGM3ZhN2akNcjEk5kua7zVRXScKkXG9V\"]},\"contracts/extensions/ERC721Whitelist.sol\":{\"keccak256\":\"0x82388fd65856b4b32971b0dc4464040ef4686c6f4dfde247284b8c69d958f1b9\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ba312d6fcdae6fb9734a1933d48350b5da33c1634e6ac9e8717fac7f420a1a25\",\"dweb:/ipfs/QmZR3kfDiF3uPB2LkwM2raGUWxjtNYgHUfcEkHMB8aHZg4\"]}},\"version\":1}"
        }
      },
      "contracts/extensions/ERC721Batch.sol": {
        "ERC721Batch": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "_tokenIds",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data_",
                  "type": "bytes"
                }
              ],
              "name": "batchSafeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "_tokenIds",
                  "type": "uint256[]"
                }
              ],
              "name": "batchTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "batchSafeTransferFrom(address,address,uint256[],bytes)": "5a4fee30",
              "batchTransferFrom(address,address,uint256[])": "f3993d11",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data_\",\"type\":\"bytes\"}],\"name\":\"batchSafeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/extensions/ERC721Batch.sol\":\"ERC721Batch\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/extensions/ERC721Batch.sol\":{\"keccak256\":\"0x8ba70d6a50e0e6335deab1cccc330ccb5a2d9492b2ca77036c4ba258720593c7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://340301018886f7cb167425b6d4acd6d0adeebaad799c61fedb86531c39df75ff\",\"dweb:/ipfs/QmWj1Pgvc8sMeKHXD3SqmJ2dTmiFB7vAjCmMBGrJrn5vjh\"]}},\"version\":1}"
        }
      },
      "contracts/extensions/ERC721Freezable.sol": {
        "ERC721Freezable": {
          "abi": [
            {
              "inputs": [],
              "name": "ERC721EnumerableForbiddenBatchMint",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "ERC721OutOfBoundsIndex",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "_value",
                  "type": "string"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "_id",
                  "type": "uint256"
                }
              ],
              "name": "PermanentURI",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "freezeAllTokens",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "freezeToken",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "frozen",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "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": "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "freezeAllTokens()": "d2bc37f8",
              "freezeToken(uint256)": "b6854f96",
              "frozen()": "054f7d9c",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenByIndex(uint256)": "4f6ccce7",
              "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ERC721EnumerableForbiddenBatchMint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"ERC721OutOfBoundsIndex\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"PermanentURI\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freezeAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"freezeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"frozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\"}],\"devdoc\":{\"errors\":{\"ERC721EnumerableForbiddenBatchMint()\":[{\"details\":\"Batch mint is not allowed.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721OutOfBoundsIndex(address,uint256)\":[{\"details\":\"An `owner`'s token query was out of bounds for `index`. NOTE: The owner being `address(0)` indicates a global out of bounds index.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/extensions/ERC721Freezable.sol\":\"ERC721Freezable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00\",\"dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/extensions/ERC721Freezable.sol\":{\"keccak256\":\"0xb1ec1653e934e10389a34b0ffe3c79a3063581b154a42f598ab7326c35875032\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://f50ea1cb071f97dff88c9fb5381040c37f5622768c1de0a64f5cc06ad0467828\",\"dweb:/ipfs/QmeZfnPxQPXwfNDWVXB6evFSFxmNKhNssGPWJKW7PDbcH7\"]}},\"version\":1}"
        }
      },
      "contracts/extensions/ERC721MintPausable.sol": {
        "ERC721MintPausable": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "MintPaused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "MintUnpaused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "mintPaused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "mintPaused()": "7e4831d3",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MintPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MintUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/extensions/ERC721MintPausable.sol\":\"ERC721MintPausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/extensions/ERC721MintPausable.sol\":{\"keccak256\":\"0x9fdefa84aafd8fa10e976ede921229f219a3559d59883ef984981f1dc06a52e2\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://291762a7ff5d28d39be7199a195fffc7926201921105b9a06b68b9c546229846\",\"dweb:/ipfs/QmX1AVcsVSqz9VCrNVVSh5DgHBrxnu7LspbYiYjZvHEmEL\"]}},\"version\":1}"
        }
      },
      "contracts/extensions/ERC721OpenSeaGassLess.sol": {
        "ERC721OpenSeaGassLess": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "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": "_proxyRegistryAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "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": "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "_proxyRegistryAddress()": "89cd503a",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"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\":\"_proxyRegistryAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/extensions/ERC721OpenSeaGassLess.sol\":\"ERC721OpenSeaGassLess\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/extensions/ERC721OpenSeaGassLess.sol\":{\"keccak256\":\"0x6a3c225bdca6720c52e579355a380d97549614f865df519c79e15b340c71d5a7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://91e2a5a3ddf450c9e521b7cc9595634b1f66d08b23894e40f3b9cdbe535b2b4c\",\"dweb:/ipfs/QmNa4ieaK4a8rQCGM3ZhN2akNcjEk5kua7zVRXScKkXG9V\"]}},\"version\":1}"
        },
        "OpenSeaProxyRegistry": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "proxies",
              "outputs": [
                {
                  "internalType": "contract OwnableDelegateProxy",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "608080604052346100155760c7908161001b8239f35b600080fdfe6080806040526004361015601257600080fd5b600090813560e01c63c455279114602857600080fd5b34608d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112608d5760043573ffffffffffffffffffffffffffffffffffffffff9081811680910360895783604091602095528085522054168152f35b8380fd5b5080fdfea26469706673582212209af11830d8779dded947fd16dd02ad4ad0cf037114b60914ecaaaba50e4010c164736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x15 JUMPI PUSH1 0xC7 SWAP1 DUP2 PUSH2 0x1B DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xC4552791 EQ PUSH1 0x28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x8D JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x8D JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH1 0x89 JUMPI DUP4 PUSH1 0x40 SWAP2 PUSH1 0x20 SWAP6 MSTORE DUP1 DUP6 MSTORE KECCAK256 SLOAD AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 CALL XOR ADDRESS 0xD8 PUSH24 0x9DDED947FD16DD02AD4AD0CF037114B60914ECAAABA50E40 LT 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "1245:94:30:-:0;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080806040526004361015601257600080fd5b600090813560e01c63c455279114602857600080fd5b34608d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112608d5760043573ffffffffffffffffffffffffffffffffffffffff9081811680910360895783604091602095528085522054168152f35b8380fd5b5080fdfea26469706673582212209af11830d8779dded947fd16dd02ad4ad0cf037114b60914ecaaaba50e4010c164736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xC4552791 EQ PUSH1 0x28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x8D JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x8D JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH1 0x89 JUMPI DUP4 PUSH1 0x40 SWAP2 PUSH1 0x20 SWAP6 MSTORE DUP1 DUP6 MSTORE KECCAK256 SLOAD AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 CALL XOR ADDRESS 0xD8 PUSH24 0x9DDED947FD16DD02AD4AD0CF037114B60914ECAAABA50E40 LT 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "1245:94:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "methodIdentifiers": {
              "proxies(address)": "c4552791"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"proxies\",\"outputs\":[{\"internalType\":\"contract OwnableDelegateProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/extensions/ERC721OpenSeaGassLess.sol\":\"OpenSeaProxyRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/extensions/ERC721OpenSeaGassLess.sol\":{\"keccak256\":\"0x6a3c225bdca6720c52e579355a380d97549614f865df519c79e15b340c71d5a7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://91e2a5a3ddf450c9e521b7cc9595634b1f66d08b23894e40f3b9cdbe535b2b4c\",\"dweb:/ipfs/QmNa4ieaK4a8rQCGM3ZhN2akNcjEk5kua7zVRXScKkXG9V\"]}},\"version\":1}"
        },
        "OwnableDelegateProxy": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601357603a908160198239f35b600080fdfe600080fdfea2646970667358221220765c6d50df04cdf82efc9d93a4eb672d75d4d67b725bbf30139ada3d60b3e20d64736f6c63430008180033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x13 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x19 DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0x5C6D50DF04CDF82EFC9D93A4EB672D75D4D67B725BBF30 SGT SWAP11 0xDA RETURNDATASIZE PUSH1 0xB3 0xE2 0xD PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "1210:33:30:-:0;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220765c6d50df04cdf82efc9d93a4eb672d75d4d67b725bbf30139ada3d60b3e20d64736f6c63430008180033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0x5C6D50DF04CDF82EFC9D93A4EB672D75D4D67B725BBF30 SGT SWAP11 0xDA RETURNDATASIZE PUSH1 0xB3 0xE2 0xD PUSH5 0x736F6C6343 STOP ADDMOD XOR STOP CALLER ",
              "sourceMap": "1210:33:30:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/extensions/ERC721OpenSeaGassLess.sol\":\"OwnableDelegateProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xddab643169f47a2c5291afafcbfdca045d9e6835553307d090bc048b6dabd0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0ffbacfee42977167b3c75bd4787f8b72a7ab1176abd544f3dff662c6528e24\",\"dweb:/ipfs/QmUprM1cWCyaQ3LDjHA2DhwiPs3wekQ6MWXHFZdMMxpcyX\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/extensions/ERC721OpenSeaGassLess.sol\":{\"keccak256\":\"0x6a3c225bdca6720c52e579355a380d97549614f865df519c79e15b340c71d5a7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://91e2a5a3ddf450c9e521b7cc9595634b1f66d08b23894e40f3b9cdbe535b2b4c\",\"dweb:/ipfs/QmNa4ieaK4a8rQCGM3ZhN2akNcjEk5kua7zVRXScKkXG9V\"]}},\"version\":1}"
        }
      },
      "contracts/extensions/ERC721Whitelist.sol": {
        "ERC721Whitelist": {
          "abi": [
            {
              "inputs": [],
              "name": "_whitelistMerkleRoot",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "allowance",
                  "type": "string"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "proof",
                  "type": "bytes32[]"
                }
              ],
              "name": "getAllowance",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "_whitelistMerkleRoot()": "a0b30390",
              "getAllowance(string,bytes32[])": "66fddfa9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"_whitelistMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"allowance\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"getAllowance\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/extensions/ERC721Whitelist.sol\":\"ERC721Whitelist\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6\",\"dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb\"]},\"@openzeppelin/contracts/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11\",\"dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe\"]},\"@openzeppelin/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0x36a0c409c437a753cac9b92b75f93b0fbe92803bf2c8ff1517e54b247f166134\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f91ba472de411aa557cdbf6560c40750d87bd11c9060bc04d2ba7119af9d5a6\",\"dweb:/ipfs/QmQjtYo2i7dDvzCEzZ67bDoNSG4RrwMoxPWuqFmX5Xzpuw\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/extensions/ERC721Whitelist.sol\":{\"keccak256\":\"0x82388fd65856b4b32971b0dc4464040ef4686c6f4dfde247284b8c69d958f1b9\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ba312d6fcdae6fb9734a1933d48350b5da33c1634e6ac9e8717fac7f420a1a25\",\"dweb:/ipfs/QmZR3kfDiF3uPB2LkwM2raGUWxjtNYgHUfcEkHMB8aHZg4\"]}},\"version\":1}"
        }
      }
    }
  }
}